Фермеры переносят множественные записи?

Ли ferror в этом примере проверьте оба fprintfs за ошибку или только второй?

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!");
Другие вопросы по тегам