今天在寫選擇排序代碼時,在測試數據發現不能顯示結果
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]);
?