Фермеры переносят множественные записи?
Ли ferror
в этом примере проверьте оба fprintf
s за ошибку или только второй?
FILE * myout;
if ((myout = fopen("Assignment 11.txt", "a")) != NULL)
{
fprintf(myout, "First print ", str1);
fprintf(myout, "Second print", str1);
if (ferror(myout))
fprintf(stderr, "Error printing to file!");
fclose(myout);
}
1 ответ
Решение
Если возникает ошибка, она не будет сброшена, если clearerr
вызывается в вашем потоке, так что да, ошибка, возникающая при любой из обеих записей, записывается.
со страницы руководства ferror:
Функция ferror() проверяет индикатор ошибки для потока, на который указывает поток, и возвращает ненулевое значение, если оно установлено. Индикатор ошибки может быть сброшен только функцией clearerr().
Но вы также можете просто использовать fprintf
код возврата, чтобы увидеть, если что-то пошло не так:
Если обнаружена ошибка вывода, возвращается отрицательное значение.
( страница руководства fprintf)
Вот так (спасибо Джонатану за указание на ошибки в оригинальном сообщении):
if (fprintf(myout, "First print %s\n", str1)<0) fprintf(stderr, "Error printing to file #1!");
if (fprintf(myout, "Second print %s\n", str1)<0) fprintf(stderr, "Error printing to file #2!");