为什么在输入不同于数字的字符时scanf导致无限循环? [重复]

问题描述 投票:0回答:1

此问题已经在这里有了答案:

int main()
{
    int choose, isNum;
    printf("Choose 1,2,3,4,5,6\n");
    isNum = scanf("%d",&choose);
    while(choose != 0){
        if(!isNum || choose > 6){
            printf("Wrong option!\n");
            printf("Choose 1,2,3,4,5,6\n");
            isNum = scanf("%d",&choose);
            continue;
        }

        //6 ifs checking which number have you choose and what it does..

        printf("Choose 1,2,3,4,5,6\n");
        isNum = scanf("%d",&choose);
}}

我从这里尝试了很多事情,例如fflash,cclear,那时候我首先检查它是否为数字,然后像建议的许多答案一样使用它,它总是回到相同的无限循环中。我的问题有所不同,因为我尝试了所有答案,而且正如我所说,它没有帮助,不充裕,不清晰,并且在使用前不检查其编号。

int main(){int select,isNum; printf(“选择1,2,3,4,5,6 \ n”); isNum = scanf(“%d”,&choose); while(选择!= 0){if(!isNum ||选择> 6){printf(“ Wrong ...

c scanf infinite-loop
1个回答
0
投票

这就是scanf()在无效输入下的工作方式。我看到您用isNum检查了是否输入正确,但条件中的choose不正确。关键是,如果不从scanf()中使用,您编写的内容将保留在缓冲区中,这就是导致无限循环的原因。您必须编写代码以清除缓冲区,然后再次调用scanf()

© www.soinside.com 2019 - 2024. All rights reserved.