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

C 語言二進制輸出迴圈多一個分號導致無輸出:scanf_s 回傳值判斷陷阱

     編輯:程式設計綜合問答

問題程式碼

while (scanf_s("%ul", &number) == 1);  // ← 這裡多了一個分號!
{
    // 輸出二進制邏輯
}

現象解析

  • 分號結束了 while 迴圈,迴圈本體為空語句。
  • 程式卡在 while 不斷讀取輸入,直到輸入非數字導致 scanf_s 回傳 0/EOF,迴圈結束。
  • 隨後才執行大括號內的輸出程式碼,但此時輸入流已耗盡,無輸出。

修正版本

while (scanf_s("%ul", &number) == 1) {  // 移除分號
    // 輸出二進制邏輯
}

同類常見錯誤

錯誤模式現象修正
if (condition); { ... }大括號塊無條件執行移除分號
for (i=0; i迴圈結束後才執行一次大括號移除分號
while (getchar() != '\n');正確:清空緩衝區至換行此處分號為故意用法

防禦性編碼建議

  • 編輯器開啟「顯示分號」或「空白字元可視化」。
  • 習慣在 if/for/while 後直接寫 { 不換行,減少誤加分號機率。
  • 靜態分析工具 (Cppcheck, Clang-Tidy) 可自動偵測空迴圈本體警告。

一個微小的分號,可能讓整個演算法邏輯失效。養成「寫完迴圈條件即寫左大括號」的肌肉記憶,是避免此類低級錯誤的最佳良方。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved