當使用scanf
函數接受用戶輸入時,如果用戶輸入的數據類型與指定的格式化字符串不匹配,或者輸入的數據超出了變量的范圍,scanf
函數會返回一個非零值,表示輸入錯誤。此時,我們可以通過檢查scanf
函數的返回值來處理錯誤輸入。
例如,如果我們要接受用戶輸入一個整數,可以這樣處理錯誤輸入:
int num;
while(scanf("%d", &num) != 1) {
printf("輸入錯誤,請重新輸入一個整數:");
while(getchar() != '\n'); // 清空輸入緩沖區
}
上面的代碼中,當用戶輸入的不是一個整數時,scanf
函數會返回一個非零值,此時會執行while
循環,清空輸入緩沖區并提示用戶重新輸入一個整數。
除了檢查scanf
函數的返回值之外,我們還可以使用feof
和ferror
函數來判斷輸入是否出錯。例如:
int num;
while(1) {
if(scanf("%d", &num) == 1) {
break; // 輸入正確,退出循環
} else if(feof(stdin) || ferror(stdin)) {
printf("輸入錯誤,請重新輸入一個整數:");
clearerr(stdin); // 清除錯誤標志
while(getchar() != '\n'); // 清空輸入緩沖區
} else {
printf("輸入錯誤,請重新輸入一個整數:");
while(getchar() != '\n'); // 清空輸入緩沖區
}
}
在這個例子中,我們使用feof
和ferror
函數判斷輸入是否出錯,如果出錯則清空輸入緩沖區并提示用戶重新輸入一個整數。