Что возвращает printf? - PullRequest
20 голосов
/ 17 мая 2010

Сегодня в моем интервью интервьюер спросил: printf - это функция, и каждая функция возвращает что-то; int, void, float и т. д. Теперь, что возвращает printf, поскольку это функция?

Ответы [ 4 ]

36 голосов
/ 17 мая 2010

int. В случае успеха возвращается общее количество написанных символов. При ошибке возвращается отрицательное число.

См. Ссылку здесь

8 голосов
/ 17 мая 2010

Не каждая функция возвращает что-то, что указывается с помощью void:

void function_returns_nothing(void);

printf - это функция (объявленная в <stdio.h>), которая возвращает int, то есть количество выведенных символов. Если возникает ошибка, номер отрицательный.

1 голос
/ 17 ноября 2016

Чтобы добавить детализацию к другим прекрасным ответам:

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?

1 голос
/ 17 мая 2010
Ссылка

printf() от MSDN :

Возвращает количество напечатанных символов или отрицательное значение в случае ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...