輸入第一本書資料正常,輸入第二本時 gets(newbook.name) 直接跳過,顯示亂碼或空值(如圖所示)。
scanf("%f", &newbook.price) 讀取浮點數後,緩衝區殘留 \n(換行符)。後續 gets() 讀到該換行符即以為輸入結束,導致跳過輸入。
在每次 scanf 後、下一次 gets 前,加一個 getchar() 吸收殘留換行符:
printf("輸入圖書單價(小數點後一位):");
scanf("%f", &newbook.price);
getchar(); // 關鍵:吃掉緩衝區殘留的 \n
int main() 並 return 0;,符合 C 標準。gets()(C11 已移除),改用 fgets(newbook.name, sizeof(newbook.name), stdin) 並手動去除尾部 \n。newbook.lendername == "\r" 錯誤,應用 strcmp(newbook.lendername, "") == 0 判斷空字串。"w" 會覆蓋,若需追加記錄請用 "ab"(二進位追加)或 "a+"。void choice_1_input_new() {
// ...
while (1) {
// ...
scanf("%f", &newbook.price);
getchar(); // 吸收換行
// 其餘 scanf 同理加 getchar()
// ...
// 判斷是否借出
if (strlen(newbook.lendername) == 0) // 正確判斷空字串
newbook.isExit = 1;
else
newbook.isExit = 0;
// ...
}
}
修復緩衝區殘留換行符,輸入流程即可正常循環。