while (scanf("%d\n", &a) != EOF && n) 中的 \n 與 while (scanf("%d", &a) != EOF && n) 差異:
scanf 成功讀取並指派 n 個項目時,回傳 n。EOF (通常為 -1)。!= EOF 可作為「還有資料可讀」的判斷條件。%d 本身會**自動跳過前導空白** (空格、換行、Tab)。\n 會強制 **「讀取並丟棄一個換行符」**;若輸入流下一個字元非換行,scanf 會卡住等待。scanf("%d") 較安全,%d\n 易造成「明明有資料卻不繼續讀」的假象。while (scanf("%d", &a) == 1 && n) { /* 處理 a */ }
== 1 (成功讀一個 int),比 != EOF 更精確。\n、 等空白字元,除非你確定要「吃掉特定分隔符」。理解 scanf 空白處理機制,能避免 90% 的輸入迴圈卡死問題。