0 起因
//题:将一串整数,依次左移一个数,且原来的第一个数移到最后 //我的第一遍代码 #include<stdio.h> #define N 100 int main() { int n,i,a[N],t; printf("请输入数字个数:\n"); scanf("%d\n",&n); for(i=0;i<n;i++) { scanf("%d ",&a[i]); } t=a[0]; for(i=0;i<n-1;i++) { a[i]=a[i+1]; } a[i]=t; printf("The result is:\n"); for(i=0;i<n;i++) printf("%d ",a[i]); return 0; }
运行结果:
存在的问题:
为什么要多输入一个数,最终结果才可以正常显示,
原因:
scanf函数的第一个参数指定了后面变量读取的格式,这样写的话会按照 我们在格式化输入函数中的格式。
scanf("%d ",&a[i]);注意这里是有一个空格的,但是编译时空格或者制表符都会被忽略,所以实际输入的结果1空格2空格3,这时如果缓冲区没有东西scanf就会阻塞在那里,直到用户有输入以至于有时候会遇到再输入一行才能有返回的情况。
你的程序执行到scanf()时,会从你的缓冲区读东西,如果缓冲区是空的,就阻塞住,等待你从键盘输入。
1 修改
将空格省略之后,我们在运行程序检查。
运行结果如下:
总结:
当我们在编程中使用scanf语句时还是要小心,不然爆出的错误可能一时半会难以理解!