若用 -1 作結束標志,則無法輸入 -1 作為有效數據。需一種「無特殊數值、純靠輸入流結束」的方式。
int x, a[MAX], i = 0;
while (scanf("%d", &x) == 1) { // 返回成功匹配的賦值數
a[i++] = x;
}
// 輸入 Ctrl+D (Linux/Mac) 或 Ctrl+Z (Windows) 觸發 EOF,循環結束
scanf 返回值:成功匹配並賦值的參數個數;遇到 EOF 返回 EOF(通常為 -1);匹配失敗返回 0。while (scanf("%d", &x) == 1) 同時實現「讀取」與「判斷輸入是否為有效整數」。while (1) {
int ret = scanf("%d", &x);
if (ret == EOF) break; // 正常結束
if (ret == 0) { // 非數字輸入
scanf("%*s"); // 吞掉非法 token
printf("忽略非法輸入\n");
continue;
}
a[i++] = x;
}
採用 scanf 返回值 == 1 作為循環條件,配合 EOF 終止,即可實現「任意整數皆可輸入、無特殊標志」的健壯讀取邏輯。