0
#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。有人可以解释一下,我做错了什么吗?

4

1 回答 1

1

您的 while 条件似乎有问题。我重写了它,我得到了我认为你想要的行为(当输入小于 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;
}

编辑:我没有仔细检查我的初始帖子。根本不需要检查 isdigit ,因为您已经%d在 scanf 中使用了,我从 while 条件中完全删除了它。作为无限循环问题的快速解决方法,我添加了clean_stdin()这篇文章接受的答案中提到的函数如何仅扫描整数并在用户输入非数字字符时重复阅读?@Gangadhar 在他的评论中提到并且我推荐阅读(我也应该在发布之前完成)

于 2013-11-10T14:44:46.387 回答