Странный вывод при использовании scanf - PullRequest
5 голосов
/ 22 апреля 2011
#include <cstdio>  

int main()  
{  
    int i;
    printf("%d", scanf("%d", &i));
}

Какое бы число я ни ввел, я получаю вывод:

1

Почему это так?

Ответы [ 3 ]

11 голосов
/ 22 апреля 2011

В случае успеха функция scanf

возвращает количество успешно прочитанных элементов.

Этот счетчик может соответствовать ожидаемому количеству показаний или меньше, даже нулю, если происходит сбой сопоставления.В случае сбоя ввода до того, как какие-либо данные могут быть успешно прочитаны, возвращается EOF .

Попробуйте также:

printf("%d",scanf("%d%d",&i,&i));

4 голосов
/ 22 апреля 2011

Вы выводите результат scanf , который является не числом, которое вы вводите, а количеством успешно прочитанных элементов. Введенный вами номер сохраняется в i. Чтобы вывести его, вам нужно написать дополнительную строку:

#include <cstdio>  

int main()  
{  
   int i;
   if (scanf("%d",&i) == 1)
       printf("%d", i);
}
0 голосов
/ 22 апреля 2011

scanf() возвращает количество прочитанных элементов при успешном выполнении.Здесь он читает только одно число, следовательно, вывод равен 1 каждый раз, независимо от числа.

...