今天在写选择排序代码时,在测试数据发现不能显示结果
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]);