Как избежать использования оператора goto? - C (СИ)
Формулировка задачи:
Листинг программы
- typedef struct BOOK {
- char *name;
- } book;
- int main()
- {
- FILE *fp;
- char *fname = "sometxt";
- book nbook;
- nbook.name = "Some sucker";
- int p;
- m1: if (NULL==(fp=fopen(fname, "r+"))){
- printf("error open file %s\n", fname);
- if (NULL==(fp=fopen(fname, "a"))){
- printf("error creat file %s\n", fname);
- return 1;
- }
- else {
- fclose(fp);
- }
- goto m1;
- }
- else {
- p=fseek(fp, 4, SEEK_SET);
- //printf("p=%d\n", p);
- p=ftell(fp);
- //printf("p=%d\n", p);
- fwrite(&nbook, sizeof(struct BOOK), 1, fp);
- fclose(fp);
- }
- return 0;
- }
Решение задачи: «Как избежать использования оператора goto?»
textual
Листинг программы
- while (NULL==(fp=fopen(fname, "r+")))
Объяснение кода листинга программы
В представленном коде выполняется попытка открыть файл с помощью функции fopen. Если файл не может быть открыт, то программа будет выполнять цикл while, пока не удастся открыть файл. Вот список элементов кода:
NULL==(fp=fopen(fname,
r+))
- проверка, удалось ли открыть файл. Если файл не может быть открыт, тоfp
будет равноNULL
.(fp=fopen(fname,
r+))
- попытка открыть файл с помощью функции fopen. Если файл открывается успешно, тоfp
будет содержать дескриптор файла.fname
- имя файла, который нужно открыть.r+
- режим открытия файла. В данном случае используется режим чтения и записиr+
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д