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

C 語言鏈表排序輸入輸出全修正:malloc 條件判斷賦值錯誤、scanf 缺 &、打印指針運算錯誤

     編輯:程式設計綜合問答

原代碼三大致命錯誤

  1. if(array = NULL):條件判斷誤寫為賦值,導致 array 歸零,後續解引用崩潰。正確 if(array == NULL)。
  2. scanf("%d", array + i) 缺少 &:array + i 是 int* 正確,但原代碼 scanf("%d", a[i]) 缺 &。正確寫法 scanf("%d", &array[i]) 或 scanf("%d", array + i)。
  3. printf("%d\n", &array + i):&array 是 int(*)[N],加 i 跳過整個數組。正確 printf("%d\n", array[i]) 或 printf("%d\n", *(array + i))。

修正後完整代碼


#include 
#include 

int cmp(const void* a, const void* b) {
    return (*(int*)a > *(int*)b) - (*(int*)a < *(int*)b);
}

int main() {
    int n;
    printf("How many values? ");
    if (scanf("%d", &n) != 1 || n <= 0) {
        puts("Illegal number.");
        return 1;
    }
    int* a = malloc(n * sizeof(int));
    if (a == NULL) { puts("Memory failed."); return 1; }
    for (int i = 0; i < n; i++) {
        printf("? ");
        if (scanf("%d", &a[i]) != 1) { puts("Input error."); free(a); return 1; }
    }
    qsort(a, n, sizeof(int), cmp);
    for (int i = 0; i < n; i++) printf("%d\n", a[i]);
    free(a);
    return 0;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved