试图验证整数,但是当输入错误的值类型时,出现第一个printf的无限循环。

int main(int argc, char *argv[]) {
int input;
do{
    int starCount;
    printf("Please enter a number:");
    scanf("%d",input);
    do{
        scanf("%d",&input);
    }while(isdigit(input));
    for(starCount=0; starCount<input; starCount++){
        printf("*");
    }
    printf("\n");
}while(input>0);

return 0;


}

最佳答案

您的逻辑错误有两个原因:


您在input的末尾检查了do..while,但先前在for循环中使用了它。
绝对不需要使用双do..while循环。


您的初始scanf也存在另一个错误:

scanf("%d", input);  // <-- should be `&input`




对于您所需要的,一个do..while就足够了:

    int input;
    do{
        int starCount;
        printf("Please enter a number:");
        if( 1 != scanf("%d",&input) || input < 0 )   // <-- check return value of scanf and valid `input`
        {
            break;
        }
        for(starCount=0; starCount<input; starCount++){
            printf("*");
        }
        printf("\n");
    }while(1);


注意,您可以/应该使用scanf的返回值,并在input循环之前检查for是否有效。

关于c - C尝试验证整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41602532/

10-09 15:25