#include<stdio.h>#include<stdlib.h>int main(){int i,j,t,a[11];for(i=1;i<=10;i++) {printf("请输入第%d个数:",i);scanf("%d\n",&a[i]);}for(i=1;i<=10;i++) for(j=i+1;j<=10;j++) if(a[i]>a[j]) {t=a[i];a[i]=a[j];a[j]=t;}for(i=1;i<=10;i++)printf("%d ",a[i]);system("pause");return 0;}
scanf函数里面加\n为什么只影响到了第一次循环
scanf的格式加'\n',含义特殊,不是输入一个回车,而是输入完一个数字后,必须等待一个非空格、制表符、回车的输入,程序才会继续。
所以你那样写,第一次循环输入2回车,不会进入下一次循环,而是等待再次输入,然后你输入3的时候2被存储在元素1中,进入下一个循环,已经有3了还要等待输入,于是你输入4,实际保存的是3,所以后面都错位了,结果就是最后一个输入没有被保存。
另外所有i循环都从0开始,包括冒泡排序。
修改如下:
#include<stdio.h>那为什么scanf函数只有第一次受到影响了,\n不影响之后的循环吗
a[11]多定义一个a[0],虽然不用但不必非要使用下标从1开始,c语言的for语句非常适合下标从0开始的数组遍历,你只需要考虑“请输入第%d个数”时使用i+1替代i即可
以上程序有几个地方修改过
追问为什么scanf函数只有第一次受到影响了,\n不影响之后的循环吗