Возвращаемое значение функции printf () в C - PullRequest
29 голосов
/ 14 августа 2011

Функция printf() возвращает количество напечатанных символов.Но в приведенном ниже коде почему он печатает 5.

int a=1000;
printf("%d",printf("\n%d",a));

Он печатает «1000» один раз и пробел, так что в целом у нас есть 2 символа.

Должно появиться «1000 2».Но вывод его "1000 5".

Ответы [ 13 ]

52 голосов
/ 14 августа 2011

Количество выводимых символов - 5. 1000 - это четыре символа.\n - это один символ.

printf не возвращает количество выводимых «элементов», как семейство функций scanf для ввода.Возвращает фактическое количество символов.

9 голосов
/ 14 августа 2011

Сначала происходит внутренний вызов, печатается 5 символов (\n, 1, 0, 0, 0) и возвращается 5.

Затем происходит внешний вызов и печатается 5, который был возвращен внутренним вызовом.

4 голосов
/ 17 марта 2012

предположим, выражение:

int a=10;
printf("a=%d",printf("b=%d",a));

вывод

b=10 a=4;

b из-за значения, присвоенного b, т.е.

b=10;

и

b,=,1,0   

считается как четыре и присваивает a i.e:

a=4;
3 голосов
/ 24 февраля 2017

printf () возвращает фактическое количество символов , где, как и здесь, мы имеем 4 ("1000") + 1 ("\ n") символа такон выдаст 1000, а затем 5, что является количеством символов внутренней функции printf, и выглядит как 10005

3 голосов
/ 26 июля 2015

Давайте сначала проверим вывод внутреннего printf:

/n, 1, 0, 0, 0

Теперь вам нужно рассмотреть 2 вещи:

1) You have to take escape sequences like '\n','\t' etc into account.
2) You have to take 1 escape sequence as 1 character (not 2)

Внешний printf возвращает фактическое количество символов внутреннего printf, котороеравно 5. Таким образом, внешний printf возвращает 5.

3 голосов
/ 14 августа 2011

Вы должны четко заметить, что 1000 это 4 буквы, и у вас есть \n, что само по себе является символом

2 голосов
/ 14 августа 2011

in printf("%d",printf("\n%d",a)); printf("\n%d",a) напечатает символ новой строки '\n' и целочисленное значение 1000, что в сумме составляет 5 символов.Сначала вызывается первый внутренний printf, который печатает новую строку и 1000, а затем возвращенное значение 5 печатается внешним printf.

2 голосов
/ 14 августа 2011

Число 1000 состоит из четырех цифр, поэтому для его печати требуется четыре символа. Четыре символа плюс перевод строки - пять символов.

1 голос
/ 23 апреля 2018
int a=1000;
printf("%d",printf("\n%d",a));

В этом фрагменте кода есть 2 функции printf ():

  1. inner printf ()
  2. external printf ()

Сначала выполнится внутренняя функция printf () и напечатает 1000, а затем выполнится внешняя функция printf ().

Следует отметить, что printf() возвращает количество символов, которые он печатает и , escape-последовательности учитываются как символ в printf ().

Таким образом, выполняя внутреннюю функцию printf (), мы получили 5 (потому что '\ n', 1, 0, 0, 0 - 5 символов) Теперь, когда выполняется внешняя функция printf (),5 напечатано.

1 голос
/ 30 января 2018

Просто добавьте немного больше, количество символов, возвращаемых printf(), может зависеть от спецификаторов параметров

ex:

int a= 0xff;
printf(" : %i characters\n" ,printf("%x",a)); //prints ff : 2 characters
printf(" : %i characters\n" ,printf("%d",a)); //prints 255 : 3 characters
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...