Чтобы добавить детализацию к другим прекрасным ответам:
printf()
возвращает int
, но указывает ли это передано против напечатано / написано символов?
Функция printf
возвращает количество символов , переданных , или отрицательное значение, если произошла ошибка вывода или кодирования. C11dr §7.21.6.3 3 (мой акцент)
В случае успеха возвращается номер , переданный . stdout
обычно буферизуется , поэтому количество напечатанных символов может быть не реализовано или завершиться неудачей позже.
Когда int printf()
имеет проблемы по разным причинам, он возвращает отрицательное число. Количество символов передаваемых неизвестно.
Если происходит следующее успешное fflush(stdout)
, то неотрицательным значением из printf()
, безусловно, будет число , напечатанное .
int transmitted = printf(......);
int flush_retval = fflush(stdout);
int number_certainly_printed = -1; // Unknown
if (transmitted >= 0 && flush_retval == 0) {
number_certainly_printed = transmitted;
}
Обратите внимание, что "печать" a '\n'
обычно сбрасывает stdout
, но даже это действие не указано.
Каковы правила автоматической очистки стандартного буфера в C?