Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
而不管C中的条件如何,循环都会通过 #包括 #包括 #包括 内部主(空){ int-corX=0; 做{ printf(“请输入数字X:\n”); scanf(“%d”和&corX); }while(!(isdigit(corX)&&corX>1&&corX_C_Loops_While Loop - Fatal编程技术网

而不管C中的条件如何,循环都会通过 #包括 #包括 #包括 内部主(空){ int-corX=0; 做{ printf(“请输入数字X:\n”); scanf(“%d”和&corX); }while(!(isdigit(corX)&&corX>1&&corX

而不管C中的条件如何,循环都会通过 #包括 #包括 #包括 内部主(空){ int-corX=0; 做{ printf(“请输入数字X:\n”); scanf(“%d”和&corX); }while(!(isdigit(corX)&&corX>1&&corX,c,loops,while-loop,C,Loops,While Loop,您的while状态似乎有问题。我重写了它,我得到了我认为您想要的行为(输入小于1或大于80时请求输入) #包括 #包括 #包括 int clean_stdin() { 而(getchar()!='\n'); 返回1; } 内部主(空){ int-corX=0; 做{ printf(“请输入数字X:\n”); scanf(“%d”和&corX); }而((corX80)和&clean_stdin()); printf(“您输入的X为:%d\n”,corX); 返回0; } 编辑:我没有仔细检查我

您的while状态似乎有问题。我重写了它,我得到了我认为您想要的行为(输入小于1或大于80时请求输入)

#包括
#包括
#包括
int clean_stdin()
{
而(getchar()!='\n');
返回1;
}
内部主(空){
int-corX=0;
做{
printf(“请输入数字X:\n”);
scanf(“%d”和&corX);
}而((corX80)和&clean_stdin());
printf(“您输入的X为:%d\n”,corX);
返回0;
}

编辑:我没有仔细检查我的初始帖子。根本不需要检查isdigit,因为您已经在scanf中使用了
%d
,我将它完全从while条件中删除。作为无限循环问题的快速修复,我添加了
clean\u stdin()
这篇文章的公认答案中提到的功能,@Gangadhar在他的评论中提到了这一功能,我建议阅读它(这也是我在发布之前应该做的)

你认为isdigit有什么作用?也许你应该试着输入48?我想象isdigit检查输入的符号是否是一个数字。请看,让我们重新表述Kerrek的问题:非常感谢,它几乎可以工作-但为什么在写非数字的符号的情况下,程序会陷入无限循环,一遍又一遍地询问请输入数字X:“?此解决方案无效。
isdigit(corX)
检查corX是否在ASCII范围“0”-“9”内,该范围不同于
corX
%d
格式输入数字时获得的corX(0-9整数)值。这意味着
isdigit(corX)
始终返回0,即
!isdigit(corX)
在输入任何数字时总是返回非零。
scanf
应该读作
scanf(“%c”,&corX)
@igorpov我试图修改我的答案,希望能有所改进。我同意你的观点,我的答案没有涵盖所有内容(可能仍然没有涵盖)
#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;
}
#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;
}