2011-04-22 146 views
5
#include <cstdio> 

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

任何数字I输入输出奇怪,我得到的输出:使用scanf函数

1 

为什么会这样呢?

+0

''是一个C标准头。 – Puppy 2011-04-22 10:37:08

+2

@ DeadMG-你很荒谬。 'C标准库中的每个头文件都以不同的名称包含在C++标准库中,通过删除.h并在开始处添加'c'来生成。问题是C和C++都是特定的。 – Sadique 2011-04-22 11:41:03

回答

11

成功时,该scanf功能

返回成功读取的项目数。

这个计数可以匹配读数或更少的预期数量,甚至为零,如果匹配失败的情况。 如果在成功读取任何数据之前输入失败,则返回EOF

试试这个还有:

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

+0

OP可能需要输入的数字,它将在scanf返回后的'i'中。 – 2011-04-22 09:36:54

+2

不,我觉得他不知道'scanf'究竟返回了什么。 – Sadique 2011-04-22 09:37:26

+0

哦,当然 - 你也在那里! – 2011-04-22 09:38:05

4

你输出的scanf的结果,这是不是你输入号码,但被成功读取的项目数量。您输入的号码存储在i中。为了输出它,你会写一个额外的行:

#include <cstdio> 

int main() 
{ 
    int i; 
    if (scanf("%d",&i) == 1) 
     printf("%d", i); 
} 
+0

S.O.中太多未验证的输入。问题,也不希望它在答案中! - * *更好* if(scanf(“%d”,&i)== 1)printf(“%d \ n”,i);' – 2011-04-22 09:38:39

+0

根据您的建议进行编辑。 – Tommy 2011-04-22 11:55:22

+0

那么,我最好给你+1然后;-)。干杯。 – 2011-04-22 15:10:47

0

scanf()返回读取的项目数,当它成功。这里它的读数只有一个数字,因此每次输出都是1,不管数字是多少。