我是否每次都在一个循环中验证一个输入而没有一个无限循环,在使用break时验证错误:
int main(int argc, char *argv[]) {
int count;
for(count=1; count<6;count++) {
int input;
printf("Please enter a number 1-5:");
if(!scanf("%d",&input)){
printf("nil");
scanf("%d",&input);
}
}
return 0;
}
答案 0 :(得分:4)
也许是这样的。它会检查有效输入,但由于在未接受输入(例如数字的字符串)时难以将输入转储到scanf
,我会读取fgets
的行,如果有错误忘记它并得到另一个输入。
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int input, attempts = 0;
char str[100];
do {
if(++attempts == 6) {
exit(1);
}
printf("Please enter a number 1-5: ");
if(fgets(str, sizeof str, stdin) == NULL) {
exit(1);
}
} while(sscanf(str, "%d", &input) != 1 || input < 1 || input > 5);
printf("You entered %d\n", input);
return 0;
}
计划会议
Please enter a number 1-5: -1 Please enter a number 1-5: 42 Please enter a number 1-5: obi Please enter a number 1-5: 3 You entered 3