我希望用戶只輸入兩個整數,但不能超過兩個或少於兩個。另外,在無效輸入時,我希望打印一個錯誤並提示用戶再次輸入兩個整數。用戶應輸入由空格分隔的兩個整數,而不是換行符。因此,例如:
1)的有效輸入是:1 2
2)輸入無效:1
3)無效的輸入:如何防止用戶輸入比C中所需的輸入更多或更少的輸入?
#include<stdio.h>
int main(){
int first;
int second;
printf("Enter input:\n");
int returnValue = scanf("%d %d", &first, &second);
while(returnValue != 2){
printf("Invalid input. Please enter again: \n");
returnValue = scanf("%d %d", &first, &second);
}
printf("First: %d Second: %d\n", first, second);
return 0;
}
:1 2 3
我與以下兩種方法嘗試了
在這個涉及scanf的第一種方法中,我無法阻止用戶在換行符上輸入每個整數。我也不能將輸入限制爲2個數字。也就是說,如果用戶輸入2個以上的整數,則程序接受前2個整數而忽略第3個整數。我想在這種情況下打印錯誤。
我的另一種方法涉及與fgets和sscanf:
#include<stdio.h>
int main(){
int first;
int second;
printf("Enter input:\n");
char line[20];
fgets(line, sizeof(line), stdin);
int returnValue = sscanf(line, "%d %d", &first, &second);
while(returnValue != 2){
printf("Invalid input. Please enter again: \n");
fgets(line, sizeof(line), stdin);
returnValue = sscanf(line, "%d %d", &first, &second);
}
printf("First: %d Second: %d\n", first, second);
return 0;
}
在這種方法中,我能夠進入,如果只是一個整數後,用戶點擊進入打印錯誤。但我無法將輸入限制爲只有2個數字。也就是說,如果用戶輸入2個以上的整數,則程序接受前2個整數而忽略第3個整數。我想在這種情況下打印錯誤。
所以我的問題是,我的要求是否可以通過修改第一種方法以及第二種方法來實現?
謝謝。
如果沒有硬件支持(例如禁用所有字母的鍵盤,如果用戶碰到字母A時觸電用戶的某種方法等),防止用戶輸入他們選擇的任何輸入是不可能的。你可以做的最多的是接受輸入,並檢查它。如果遇到無效輸入,一些選擇是忽略壞部分,忽略某些數據塊(例如,如果它包含任何錯誤輸入,則爲整行),或者直接丟棄輸入並持續詢問,直到用戶輸入有效的內容。 – Peter
「所以我的問題是,我的要求是否可以通過修改第一種方法以及第二種方法來實現?」 - >是的,[示例](http://stackoverflow.com/a/27805565/2410359),但不值得。使用[@David Bowling](http://stackoverflow.com/a/41917246/2410359) – chux