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

C 語言多組測試輸入:為何 while(scanf(...)!=0) 錯誤而 while(scanf(...)==1 && n!=0) 正確

     編輯:程式設計綜合問答

在處理「多組測試,輸入 0 結束」的題目時,正確判斷 scanf 返回值至關重要。scanf 的返回值有三種情況,直接決定迴圈邏輯是否正確。

scanf 返回值詳解

  1. 正整數:成功讀取並賦值的項目數。例如 scanf("%d", &n) 返回 1 表示成功讀取一個整數。
  2. 0:輸入不匹配格式,無法讀取任何值。例如輸入 "abc" 給 %d,返回 0,且 n 值不變,輸入緩衝區仍殘留 "abc",導致無限迴圈。
  3. EOF(通常為 -1):輸入流結束(檔案結束或控制台輸入 Ctrl+Z/D)。

錯誤寫法分析

while ((scanf("%d", &n)) != 0) // 錯誤

當輸入非數字(如 "abc")時,scanf 返回 0,迴圈條件為假而退出,但題目要求只有輸入 0 才結束。更嚴重的是,若輸入流結束返回 EOF (-1),條件 -1 != 0 為真,進入迴圈處理未初始化的 n,造成未定義行為。

正確寫法

while (scanf("%d", &n) == 1 && n != 0) // 正確
  • scanf(...) == 1:確保成功讀取一個整數(排除格式錯誤與 EOF)。
  • n != 0:業務邏輯判斷,輸入 0 時結束迴圈。

此寫法能正確處理:正常數字輸入、非數字輸入(配合清理緩衝區)、EOF 結束、以及 0 終止條件。

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