【发布时间】:2014-11-12 12:30:51
【问题描述】:
所以我有这样的代码和平:
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();
}
choice_dup 已经在 main 的开头分配为 char var。所以当我运行它时一切都很好。但即使我按 y 或 n 它也无法识别它并且循环永远不会结束。不管我输入什么。有人可以帮助我并向我解释有什么问题吗?
【问题讨论】:
-
其中一个条件永远为真 -> 它们的析取永远为真。
-
choice_dup将永远不是y或不是n -
问题在于你的情况。您需要使用 AND 而不是 OR 进行检查。当您点击“Y”时,它与“N”不同。您想验证它何时与“Y”不同且与“N”不同
-
根本原因是无法调试。如果您将复杂的条件分解为两个带有中间布尔变量的表达式以供同时使用,那么您肯定会发现逻辑错误,无论是使用调试器还是使用 printf 日志记录。您现在应该停止编写代码并学习一些调试。
-
谢谢您,先生!我修好了它! :D
标签: c loops while-loop