C如何在循环中验证输入而不使用break

时间:2017-01-11 19:35:27

标签: c validation loops

我是否每次都在一个循环中验证一个输入而没有一个无限循环,在使用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;

}

1 个答案:

答案 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