Формат %n
спецификатор, при использовании в scanf()
, как ожидается, чтобы сохранить подсчет количества символов в строке формата, уже обработанных с помощью функции в качестве аргумента типа int*
.Согласно определению:Почему спецификатор формата% n работает нормально для всех операторов scanf(), но сохраняет одно меньше в первом?
The number of characters of the format string already processed is stored in the pointed location.
Но в моей программе он работает так, как и во всех, кроме первого scanf()
. Всю мою scanf()
s в моей программе, за исключением первой, она хранит счетчик общего количества символов, введенных с консоли, включая новые строки (Введите ключей). Но в первом scanf()
, счет один менее общее количество символов и строк, введенных с консоли.
Пожалуйста, объясните эту аномалию, так как это действительно расстраивает, что я не могу обнаружить эту простую ошибку.
#include <stdio.h>
int main()
{
int a,b,c,d,count;
printf("First Trial\n");
scanf("%d%d%d%d%n",&a,&b,&c,&d,&count); //OUTPUT ANOMALY HERE
printf("count=%d\n",count);
printf("Second Trial\n");
scanf("%d%n",&a,&count);
printf("count=%d\n",count);
printf("Third Trial\n");
scanf("%d%d%n",&a,&b,&count);
printf("count=%d\n",count);
printf("Fourth Trial\n");
scanf("%d%n%d",&a,&count,&b);
printf("count=%d",count);
}
Пример вывода
First Trial
253
34
4
83
count=11
Second Trial
25
count=3
Third Trial
234
38
count=7
Fourth Trial
3534
35
count=5
Почему в первом испытании мы получим "11" вместо «12? Вот мои сомнения.
CRUCIAL EDIT
Другое find.If for first scanf()
, вместо использования Enter
ключей (новые строки), чтобы отделить введенные числа, если я использую пробел, много пробелов, тогда все эти пробелы подсчитываются также count
.Например, я получаю count=21
. Это означает, что символы новой строки, пробелы, все рассматривается, но почему это один менее для первого испытания?
First Trial
25 35 38 98
count=21
Если первый 'scanf()' не использует новые строки, используемые для отправки ввода, то как бы вы объяснили счет ** 11 **? Ничто иное не описывает это, поскольку общее количество символов равно 8 (Цифры всех чисел для первого scanf() объединены) – Thokchom
Ничто иное не описывает подсчеты в других 'scanf()' s, если мы предполагаем, что новые строки не используются. – Thokchom
На самом деле эта линия взята из Cplusplusreference. Но я знал, что это значит, хотя это было написано не так. Я знал, что это означает, что символы читаются из входного потока. – Thokchom