无论C中的条件如何,循环都会通过

时间:2013-11-10 14:29:09

标签: c loops while-loop

#include <stdio.h>
#include <string.h>
#include <ctype.h>


int main(void){
    int corX = 0;

    do{
        printf("Please enter number X:\n");
        scanf("%d",&corX);
    } while(!(isdigit(corX) && corX>1 && corX<80));

    printf("You entered X as: %d\n",corX);
    return 0;
}

嗨!上面的代码应该检查输入的值是否是整数并且是否适合该范围。如果没有,程序应该再问一次。不幸的是,它不能以这种方式工作。无论我写什么,循环总是通过,结果我收到数字输入的数字和其他标志的0。有人可以解释一下,我做错了什么?

1 个答案:

答案 0 :(得分:1)

你的状况似乎有问题。我重写了它,我得到了我认为你想要的行为(当输入小于或等于80时要求输入)

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int clean_stdin()
{
  while (getchar()!='\n');
  return 1;
}


int main(void){
    int corX = 0;

    do{
        printf("Please enter number X:\n");
        scanf("%d",&corX);
    } while( ( corX<1 || corX>80 ) && clean_stdin() );

    printf("You entered X as: %d\n",corX);
    return 0;
}

编辑:我没有仔细检查我的初始帖子。由于您已在scanf中使用%d,因此根本不需要检查isdigit,我将其从while条件中完全删除。作为无限循环问题的快速解决方案,我添加了clean_stdin()函数,该函数在@Gangadhar在他的评论中提到的帖子How to scanf only integer and repeat reading if the user enter non numeric characters?的接受答案中提及,我推荐阅读(我也应该这样做)在发布之前做过)