今天在写选择排序代码时,在测试数据发现不能显示结果
1、代码如下:
#include <stdio.h>
int main(void) {
int i, j; // 循环变量
int MinIndex; // 保存最小的值的下标
int buf; // 互换数据时的临时变量
int n;
printf("你想输入多少个数据n:\n");
scanf("%d",&n);
int a[n];
for(int k=0;k<n;k++)
{
scanf("%d ",&a[k]);
}
for (i = 0; i < n - 1; ++i) { // n个数比较n-1轮
MinIndex = i;
for (j = i + 1; j < n; ++j) { // 每轮比较n-1-i次,找本轮最小数的下标
if (a[MinIndex] > a[j]) {
MinIndex = j; // 保存小的数的下标
}
}
if (MinIndex != i) {
/* 找到最小数之后如果它的下标不是i则说明它不在最左边,互换位置 */
buf = a[MinIndex];
a[MinIndex] = a[i];
a[i] = buf;
}
}
printf("最终排序结果为:\n");
for (i = 0; i < n; ++i) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
2、测试数据
3、错误原因
在scanf函数后面加了一个空格。这会导致输入的整数后面带有一个额外的空格,从而影响程序的正确性。
4、解决办法
scanf("%d ",&a[k]);
改为
scanf("%d",&a[k]);