首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言指針實現三個數由大到小排序:常見錯誤修正與正確代碼

     編輯:C 語言問答

原始代碼錯誤

void swap(int *x,int *y,int *z) {
    int m;          // 定義了 m
    if(*y>*x) { t=*y; ... } // 卻使用未聲明的 t → 編譯錯誤
    ...
}
int *P2, *P3;       // 大寫 P
p2=&b; p3=&c;       // 使用小寫 p → 編譯錯誤(C區分大小寫)

修正後完整代碼

#include <stdio.h>

void swap_desc(int *x, int *y, int *z) { // 降序排列
    int t;
    // 確保 *x 最大
    if (*y > *x) { t = *y; *y = *x; *x = t; }
    if (*z > *x) { t = *z; *z = *x; *x = t; }
    // 確保 *y >= *z
    if (*z > *y) { t = *y; *y = *z; *z = t; }
}

int main(void) {
    int a, b, c;
    int *p1, *p2, *p3; // 統一小寫
    printf("輸入三個整數: ");
    scanf("%d %d %d", &a, &b, &c);
    p1 = &a; p2 = &b; p3 = &c;
    swap_desc(p1, p2, p3);
    printf("降序: %d, %d, %d\n", a, b, c);
    return 0;
}

錯誤總結與避坑指南

錯誤類型表現修正
變量名不一致聲明 m 用 t統一臨時變量名,建議用 tmp 或 t
大小寫敏感P2 vs p2C 語言嚴格區分大小寫,養成統一命名風格(如全小寫下劃線)
邏輯不全僅兩兩交換可能不夠三數排序需 3 次比較交換,或調用 qsort/寫通用排序

進階寫法:通用比較函數 + qsort

int cmp_desc(const void *a, const void *b) {
    return *(int*)b - *(int*)a;
}
int main() {
    int a[3];
    scanf("%d%d%d", &a[0], &a[1], &a[2]);
    qsort(a, 3, sizeof(int), cmp_desc);
    printf("%d %d %d\n", a[0], a[1], a[2]);
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved