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

C 語言鏈表學生管理系統代碼錯誤全修正:語法、指針、邏輯三類問題逐一修復

     編輯:程式設計綜合問答

原代碼主要錯誤

行號錯誤類型問題描述修正
1-2頭文件#include 缺少文件名#include <stdio.h> #include <stdlib.h>
10結構體struct *next 缺少標籤struct STD *next; 或前向聲明 typedef struct STD STD;
28拼寫scnaf → scanf修正拼寫
29scanfscanf("%lf", p1->score) 缺少 &scanf("%lf", &p1->score)
31邏輯head=NULL 放在循環外導致首節點丟失移入 if(n==1) head=p1; 之前
33邏輯循環體缺少 p1 = p2 = malloc... 導致死循環在循環末尾重新分配並讀取下一節點
45變量printf("%d", d) 變量 d 未定義printf("%d", n)
46指針*P=head 大小寫錯誤且多 *p = head;
48打印printf("%d", p->score) 用 %d 打印 double%f 或 %.2f
49遍歷p->next; 無賦值,死循環p = p->next;

修正後完整代碼


#include <stdio.h>
#include <stdlib.h>

typedef struct STD {
    char name[20];
    int num;
    double score;
    struct STD *next;
} STD;

STD* create_list();
void print_list(STD* head);

int main() {
    STD* head = create_list();
    print_list(head);
    return 0;
}

STD* create_list() {
    STD *head = NULL, *tail = NULL, *p;
    int n = 0;
    while (1) {
        p = (STD*)malloc(sizeof(STD));
        printf("輸入姓名(0結束): ");
        scanf("%19s", p->name);
        if (strcmp(p->name, "0") == 0) { free(p); break; }
        printf("輸入學號: "); scanf("%d", &p->num);
        printf("輸入成績: "); scanf("%lf", &p->score);
        p->next = NULL;
        if (head == NULL) head = tail = p;
        else { tail->next = p; tail = p; }
        n++;
    }
    printf("共輸入 %d 筆記錄\n", n);
    return head;
}

void print_list(STD* head) {
    STD* p = head;
    while (p) {
        printf("姓名: %-10s 學號: %-6d 成績: %.2f\n", p->name, p->num, p->score);
        p = p->next;
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved