用for循环连续读入值的时候发现**scanf("%d",&n)与scanf("%d\n",&n)**有区别。
例如:
# include <stdio.h>
# include <iostream>
using namespace std;
int main()
{ int n,a;
scanf("%d",&n);
for(int i=0;i<n;++i){
scanf("%d",&a);
}
printf("end");
return 0;
}
在这个程序中输入n=5,然后从键盘依次读入1 2 3 4 5时可以正常进行并打印end。
如
而如果在scanf的“ ”中加入\n时输入异常{scanf("%d\n",&a)}。
例如程序
# include <stdio.h>
# include <iostream>
using namespace std;
int main()
{ int n,a;
scanf("%d",&n);
for(int i=0;i<n;++i){
scanf("%d\n",&a);
}
printf("end");
return 0;
}
在此更改后的程序中依旧输入n=5,从键盘读入1 2 3 4 5后发现并不能按照修改前的程序输出end,而应该再次从键盘读入一个数字后正常进行。
如上图所示,printf函数无反应。
而当键入6并回车后
如上图所示程序继续执行,printf函数正常打印end字符。
因此请问
scanf("%d\n",&a)与scanf("%d",&a)之间的区别。
如果你在%d后面加\n,你直接敲一个回车的时候,这个回车会被当做对数字的确认,而被丢弃(被当做空格、制表符之类的分隔符了)
你需要在数字后面加个空格,再回车,或者连续键入2个回车
不应该加\n
不需要加\n,不然你输入完一个数组后要回车两下才能输入下一个数字