void rankArr(char *pr[]) {
char *temp;
int i, j;
for (i = 0; i < 5; i++) {
for (j = i + 1; j < 5; j++) {
if (strcmp(pr[i], pr[j]) > 0); // <=== 這裡多了一個分號!
{
temp = pr[j];
pr[j] = pr[i];
pr[i] = temp;
}
}
}
}
if (condition); 等價於:
if (condition)
; // 空語句,什麼都不做
{ // 這是一個獨立的代碼塊,無條件執行!
swap(...);
}
結果:**每輪內層循環無條件交換**,數組陷入混亂,輸出結果完全錯誤。
if (strcmp(pr[i], pr[j]) > 0) { // 無分號,大括號包裹執行體
temp = pr[j];
pr[j] = pr[i];
pr[i] = temp;
}
-Wempty-body、MSVC /Wall 會提示「empty statement after if」。| 版本 | 邏輯 | 特點 |
|---|---|---|
| 錯誤版(選擇排序變體) | j = i+1 比較剩餘元素 | 交換次數少,但單次遍歷未必將最小值冒泡到最前 |
| 註釋版(冒泡排序) | j = 0; j < 4-i 相鄰比較 | 每輪將最大值沉底,邏輯經典但交換次數多 |