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

C 語言順序表操作修正:邊界條件判斷與輸入格式陷阱

     編輯:程式設計疑難解答

原代碼兩個致命錯誤

1. 查找函數邊界判斷錯誤

// 原代碼
if (n > L.length) // 錯:當 n == length+1 時也判定錯誤,但合法插入位置最大为 length+1
// 修正
if (n < 1 || n > L.length + 1) // 合法范圍 [1, length+1]

同理,刪除、按序號查找的判斷應為 n < 1 || n > L.length。

2. scanf 格式字符串缺少分隔符

// 原代碼
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);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved