C++的高手请解答

来源:百度知道 编辑:UC知道 时间:2024/06/01 02:37:57
#include<stdio.h>
void main()
{int n,a[100],i,j,t;
printf("请输入你需要排序的数的个数(1~100):\n");
scanf("%d",&n);
printf("请输入你需要排序的数字:\n");
for(i=0;i<n;i++)
scanf(" %d ",&a[i]);
printf("排序前:");
for(i=0;i<n;i++)
printf(" %d ",a[i]);
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("\n排序后:");
for(i=0;i<n;i++)
{printf(" %d ",a[i]);}
printf("\n");
}
在测试的时候为什么老是要输入比你输入的n值多一个数字的啊?

关键在这一句:scanf(" %d ",&a[i]);

请注意,scanf函数中,格式串(也就是""中间的内容)定义了输入数据的格式,因为你在%d前后都加上了空格,所以程序在判断输入的有效数据时,会严格按照你在格式串中定义的格式来比对,造成了多输入一个的错误。

其实最后多输入的那个数字毫无意义,只是起到了程序识别有效输入数据的一个标识符的作用,嘿嘿,以后注意吧

修改成scanf("%d",&a[i]); 就好了

scanf(" %d ",&a[i]);
%d 后面不要加空格
改为
scanf("%d",&a[i]);

程序本身没问题,你不会把n本身算进去了吧?

scanf(" %d ",&a[i]);
把引号里的空格去掉

for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
错了,应该是

for(j=0;j<n-1;j++)
for(i=0;i<n-j;i++)

你的哪个冒泡法 完全错拉嘛~~~