对于此代码:问题的scanf( “%d n”,&I)
int i;
scanf("%d\n",&i);
我不能停止我的程序,直到我输入两个数字。
我认为这很奇怪,我知道当输入合适时,scanf将返回1. 当我输入“12a”输入“”,“12”输入“2”等等,就可以了,我= 12,似乎当我输入的东西是不同的int或输入一个'回车'和另一个,scanf返回1.
我错过了什么?
对于此代码:问题的scanf( “%d n”,&I)
int i;
scanf("%d\n",&i);
我不能停止我的程序,直到我输入两个数字。
我认为这很奇怪,我知道当输入合适时,scanf将返回1. 当我输入“12a”输入“”,“12”输入“2”等等,就可以了,我= 12,似乎当我输入的东西是不同的int或输入一个'回车'和另一个,scanf返回1.
我错过了什么?
“我不能停止我的程序,直到我输入两个数字,当我使用scanf("%d\n",&i);
”
虽然这种格式使得scanf
阅读次数,并将其存储i
,这个“读书”继续并一直持续到找到非空白字符后跟\n
。这就是为什么输入1 2
使这个scanf
停止的原因。
在这种情况下,您不应在输入格式中指定换行符。 改为使用scanf("%d",&i);
。
谢谢,我从来没有这样做,我只是想知道原因。 – Sphinx 2012-03-02 06:50:31
这是因为scanf函数的'\n
的... 如果你想进入一个新的生产线,只是把:
printf ("\n");
而且将给你一个空行...
scanf(“%d \ n”,& i);
读取数字,直到出现非空白字符(忽略数字后的所有空格和'\ n')。
尝试重新制定和重新格式化您的问题。 – thumbmunkeys 2012-03-01 12:27:21
我还添加了[tag:C++]标记,因为这种行为对于两种语言都是相同的 – LihO 2012-03-01 12:44:31
@LihO虽然'scanf'在[tag:C++]中可用,但使用'istream'会更合适。也许这个问题应该只剩下[tag:C]。 – 2012-03-01 13:37:24