【问题标题】:My while loop with char doesnt work. Some help please我的带 char 的 while 循环不起作用。请帮忙
【发布时间】: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


【解决方案1】:

循环将永远运行,因为while (choice_dup != 'y' || choice_dup != 'n') 将始终评估为true

你可能想要:while (choice_dup != 'y' &amp;&amp; choice_dup != 'n')

【讨论】:

  • 是的,既然您提到了它,那是一个非常愚蠢的错误。再次非常感谢! :D
  • 我现在有另一个问题 xD。出于某种原因,当我运行它时,即使我按 y 或 n 它也不起作用。但是当我按“y”时,它可以工作,但又不能正常工作。当我按“y”或“n”时,它会再次运行 printf 命令,然后程序结束。为什么?有人可以向我解释吗?此外,当我键入的字符多于一个字符时(exp。当我键入:ysh 时,它将运行 printf coomand 3 次)它会执行此操作。
  • 嗯,首先需要解决的是 getChar(),我假设它从标准输入读取一个字符,在循环中被调用了两次。但是为了得到关于正在发生的事情的明确答案,我想你需要发布更多代码:-)
【解决方案2】:

应该是这样的:

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();
}

【讨论】:

    【解决方案3】:

    随便用

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

    【讨论】:

      【解决方案4】:

      在最后一个while循环中,即choice_dup的那个,改成:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-24
        • 2018-06-12
        • 2017-12-14
        • 2017-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多