почему использование% n в printf () не печатает число вхождений переменной до% n в C? - PullRequest
0 голосов
/ 10 января 2020
#include <stdio.h>
int main ()
{ 
   int c;
   printf ("the value of %nc :  
   ", &c);

   return 0;
}

Вывод: значение 0

Ответы [ 2 ]

4 голосов
/ 10 января 2020

Per C 2018 7.21.6.1 8, для спецификатора преобразования n:

Аргумент должен быть указателем на целое число со знаком, в которое записано количество символов, записанных в выходной поток до сих пор этим вызовом fprintf [или printf].…

Таким образом, эффект printf ("the value of %nc : ", &c); состоит в записи символов «значение из c: »для вывода и для ввода количества символов в« значение »в c, что составляет 13.

2 голосов
/ 10 января 2020

Для начала вы не можете разделять строковый литерал с символом новой строки. Так что этот вызов

   printf ("the value of %nc :  
   ", &c);

синтаксически неверен. Либо пишите

   printf ("the value of %nc :  \n   ", &c);

, либо пишите

       printf ("the value of %nc :  \n"
   "", &c);

При вызове выше функция printf не выводит значение самой переменной c. Вам нужен дополнительный вызов функции printf для вывода значения переменной c.

Если вы хотите сделать это в одну строку, вы можете написать так, как показано в демонстрационной программе ниже. .

#include <stdio.h>

int main(void) 
{
   int c;

   printf( "%d\n",  ( printf ("the value of %nc :  ",  &c ), c ) );

    return 0;
}

Вывод программы:

the value of c :  13

Или, если вы хотите включить символ новой строки в выводимый строковый литерал, вы можете переписать вызов pf printf следующим образом

printf( "%d\n",  ( printf ("the value of %nc :  \n   ",  &c ), c ) );

В этом случае вывод программы будет выглядеть как

the value of c :  
   13
...