c语言 为什么scanf加了个\n会差别那么大。。

#include<stdio.h>
int i;
int s[3];
main()
{
for( i=0;i<3;i++)
{
scanf("%d\n",&s[i]);
printf( "[第 %d 次] -- %d\n", i, s[i]);
}
getch();
}

#include<stdio.h>
int i;
int s[3];
main()
{
for( i=0;i<3;i++)
{
scanf("%d",&s[i]);
printf( "[第 %d 次] -- %d\n", i, s[i]);
}
getch();
}

为什么scanf加了个\n会差别那么大。。
第一个要输入两个数才可以运行 第二个一个就可以了

scanf("%d\n",&s[i]);
在scanf的输入格式串中,除了定义的输入变量类型,其它字符在定义了在输入中接收这些字符
"%d\n"这表示,scanf在接收一个整形数后,再接收一个换行符

scanf("%d,%d",&a,&b);
这就要求输入时,两个整形间要有一个逗号隔开

123,465(如果没有中间没有逗号,那是会出错的~)
反正就是,在格式串中定义的非类型控制符,那么相应的在输入时也要输入这个字符
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-09-19
printf和scanf函数除了作用以外,其他都一样的,
叫做格式化输入/输出函数
他们遵守一个规则,那就是原样输入/输出
比如说我
scanf("asd");
那这个scanf就是要等你输入了asd之后才会执行接下来的代码
不过好像现在没有这个标准了
当我们需要接受值给变量的时候
就需要一个以%开头的格式控制符才占位,
在该位置的时候收到的值,赋值给变量
如果你在scanf()中写入了一个\n
他就要求是要接收到\n才会继续执行
当然这里他需要的并不是字符串\n,
而是一个换行符
第2个回答  2011-01-20
scanf比较笨拙,要求用户输入和它第一个参数一模一样的内容.刚好\n和回车的效果是一样的,于是你第一次回车的时候它去取用户输入,发现回车还没输入(就是被scanf当做取字符分析而不是当做\n处理了).于是要再敲一次..
第3个回答  2015-10-05
在用函数scanf()输入非字符型数据时,以下几种情况认为数据输入一结束:
1、键入空格符、回车符、制表符
2、达到指定宽度,如,scanf("%2d",a);若你输入1234,则传送到a的只是12
3、输入非数字字符
函数scanf()格式控制字符串中含有'\n'等转义字符,会导致数据输入不能按照正常方式终止。
第4个回答  2011-01-21
scanf()是格式输入函数.它规定的参数只有两类,一类是格式串,一类是数据的地址.而且,格式中里的格式符数必须与数据一致.你没按它的规定使用.当然出错.
相似回答