Как избежать использования оператора 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+
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д