Как избежать использования оператора 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+