// 原代碼
if (n > L.length) // 錯:當 n == length+1 時也判定錯誤,但合法插入位置最大为 length+1
// 修正
if (n < 1 || n > L.length + 1) // 合法范圍 [1, length+1]
同理,刪除、按序號查找的判斷應為 n < 1 || n > L.length。
// 原代碼
scanf("%s%s%d", data.key, data.name, &data.age);
// 問題:連續兩個 %s 會將「學號 姓名」作為一個字符串讀入 key,name 讀到年齡導致錯誤。
// 修正:輸入時用空格或逗號分隔,格式串對應
scanf("%s %s %d", data.key, data.name, &data.age); // 以空格分隔
// 或要求用戶輸入逗號分隔
scanf("%s,%s,%d", data.key, data.name, &data.age);
SeqListInsert 移動元素循環條件 i >= n 正確,但需確保 n 合法。SeqListDelete 循環 i < L.length 應為 i <= L.length?實際 for(i=n; i<L.length; i++) 正確(將后續元素前移)。do-while 以 age==0 退出,但 0 可能是合法年齡,建議改用特定標識(如學號為 "exit")。// SeqListFindByNum
if (n < 1 || n > L.length) { printf("元素序號不正確\n"); return NULL; }
// 主函數輸入
printf("輸入添加的結點(學號 姓名 年齡): ");
scanf("%s %s %d", data.key, data.name, &data.age);