2012-03-01 88 views
4

对于此代码:问题的scanf( “%d n”,&I)

int i; 
scanf("%d\n",&i); 

我不能停止我的程序,直到我输入两个数字。

我认为这很奇怪,我知道当输入合适时,scanf将返回1. 当我输入“12a”输入“”,“12”输入“2”等等,就可以了,我= 12,似乎当我输入的东西是不同的int或输入一个'回车'和另一个,scanf返回1.

我错过了什么?

+0

尝试重新制定和重新格式化您的问题。 – thumbmunkeys 2012-03-01 12:27:21

+0

我还添加了[tag:C++]标记,因为这种行为对于两种语言都是相同的 – LihO 2012-03-01 12:44:31

+0

@LihO虽然'scanf'在[tag:C++]中可用,但使用'istream'会更合适。也许这个问题应该只剩下[tag:C]。 – 2012-03-01 13:37:24

回答

13

“我不能停止我的程序,直到我输入两个数字,当我使用scanf("%d\n",&i);
虽然这种格式使得scanf阅读次数,并将其存储i,这个“读书”继续并一直持续到找到非空白字符后跟\n。这就是为什么输入1 2使这个scanf停止的原因。

在这种情况下,您不应在输入格式中指定换行符。 改为使用scanf("%d",&i);

+0

谢谢,我从来没有这样做,我只是想知道原因。 – Sphinx 2012-03-02 06:50:31

3

这是因为scanf函数的'\n的... 如果你想进入一个新的生产线,只是把:

printf ("\n"); 

而且将给你一个空行...

0

scanf(“%d \ n”,& i);

读取数字,直到出现非空白字符(忽略数字后的所有空格和'\ n')。