我与char的while循环不起作用。请帮帮忙

我与char的while循环不起作用。请帮帮忙,c,loops,while-loop,C,Loops,While Loop,所以我有了这种代码的和平: int choice_dig; char choice_dup; printf("Welcome to the mystery number game.\n"); printf("How many digits do you want to use (3 to 5)?"); scanf("%d", &choice_dig); while (choice_dig<3 || choice_dig>5) { printf("\nPlease ch

所以我有了这种代码的和平:

int choice_dig;
char choice_dup;
printf("Welcome to the mystery number game.\n");
printf("How many digits do you want to use (3 to 5)?");
scanf("%d", &choice_dig);
while (choice_dig<3 || choice_dig>5)
{
    printf("\nPlease choose a number between 3 and 5.\t");
    scanf("%d",&choice_dig);
}
printf("\nDo you want to allow duplicate digits (y or n)?");
scanf(" %c", &choice_dup);
while (choice_dup != 'y' || choice_dup != 'n')
{
    printf("\nInvalid entry. Please choose y for yes and n for no.\t");
    choice_dup = getchar();
    getchar();
}
int-choice\u-dig;
char-choice_-dup;
printf(“欢迎来到神秘数字游戏。\n”);
printf(“您希望使用多少位数字(3到5)”;
scanf(“%d”&choice\u dig);
while(选项5)
{
printf(“\n请选择一个介于3和5之间的数字。\t”);
scanf(“%d”&choice\u dig);
}
printf(“\n是否允许重复数字(y或n)?”;
scanf(“%c”、&choice\u dup);
while(choice_dup!=“y”| choice_dup!=“n”)
{
printf(“\n无效输入。请选择y表示是,选择n表示否。\t”);
choice_dup=getchar();
getchar();
}

选项_dup已被分配为main开头的char变量。所以,当我运行这一切都很好。但即使我按下y或n键,它也无法识别,循环永远不会结束。不管我打什么。有人能帮我解释一下有什么不对吗

循环将永远运行,因为
while(choice_dup!=“y”| | choice_dup!=“n”)
将始终计算为
true

您可能想要:
while(choice\u dup!=“y”和&choice\u dup!=“n”)

应该是这样的:

printf("\nDo you want to allow duplicate digits (y or n)?");
scanf(" %c", &choice_dup);
while (choice_dup != 'y' && choice_dup != 'n')
{
    printf("\nInvalid entry. Please choose y for yes and n for no.\t");
    choice_dup = getchar();
    getchar();
}
只用

 while (choice_dup != 'y' && choice_dup != 'n') instead

在最后一个while循环(即choice_dup循环)中,将其更改为:

while(!(choice_dup=='y'| choice_dup=='n'))

其中一个条件始终为真->它们的析取将始终为真。
choice\u dup
将始终为not
y
或not
n
问题在于您的条件。您需要检查使用AND而不是OR。当你点击“Y”时,它与“N”不同。您希望验证何时与“Y”和“N”不同根本原因是无法调试。如果您使用中间booean变量将复杂的条件表达式分解为两个表达式,以便在while中使用,那么您肯定已经发现了逻辑错误,无论是使用调试器还是printf日志记录。您现在应该停止编写代码,学习一些调试。谢谢您,先生!我修好了戴亚,既然你提到了,那是一个相当愚蠢的错误。再次非常感谢!:我现在有另一个问题xD。由于某种原因,当我运行它时,即使我按y或n,它也不起作用。但当我按下“y”键时,它会工作,但又不正常。当我按下“y”或“n”时,它会再次运行printf命令,然后程序结束。为什么?有人能给我解释一下吗?另外,当我键入的字符多于一个时(例如,当我键入:ysh时,它将运行printf命令3次),它会这样做。首先需要寻址的是,getChar()在循环中被调用两次,我假设它从stdin读取一个字符。但是为了得到一个关于正在发生的事情的明确答案,我想您需要发布更多的代码:-)