почему использование% n в printf () не выводит количество вхождений переменной до% n в C?

#include <stdio.h>
int main ()
{ 
   int c;
   printf ("the value of %nc :  
   ", &c);

   return 0;
}

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

2 ответа

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

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

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

Во-первых, вы не можете разделить строковый литерал промежуточным символом новой строки. Итак, этот звонок

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