почему использование% 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