【问题标题】:Non-function do while loop in CC中的非函数do while循环
【发布时间】:2020-10-10 05:29:06
【问题描述】:

我是编程新手,希望能得到一些帮助。我正在尝试在 C 中创建一个“do while”循环作为我的 CS50 问题集的一部分。我试图在“while”下使用两种不同的条件,但由于某种原因,它们没有被识别。这是我的代码

#include <stdio.h>
#include <cs50.h>

int get_height(void);

int main(void)

{
    int height = get_height();
    printf("you picked %i\n", height);
}

int get_height(void)
{
    int height;
    do
    {
        height = get_int("enter height\n");
    }
    while (height > 8 && height < 1);
    return height;
}

我试图强制用户输入一个小于 8 但大于 0 的整数。如果我取出两个条件中的任何一个,则该单个条件有效。但是,如果我尝试同时使用这两种条件,代码会编译并运行,但不会强制我在指定的参数内输入数字。我可以输入任何数字,它会被接受。有人可以帮忙吗?

编辑: 我很尴尬。我误解了 AND 运算符的工作原理。

【问题讨论】:

  • height &gt; 8height &lt; 1 怎么会是真的?
  • 没有必要尴尬。但是请务必单击其中一个答案旁边的复选标记,以便每个人都知道该问题已得到解答。见What should I do when someone answers my question
  • @user3386109 谢谢,我在第一次回复后不久就尝试这样做,但在一段时间内无法点击它。立即点击!

标签: c do-while cs50 logical-or logical-and


【解决方案1】:

我认为数学还没有找到一个可以同时小于1和大于8的整数。

while (height > 8 && height < 1);

你的意思很明显

while (height > 8 || height < 1);

但是为了让你自己更清楚这样的条件,有时首先写下搜索数字的条件是有用的。

您需要一个位于 [1, 8] 范围内的数字,即目标数字应满足条件

1 <= height && height <= 8

在这种情况下,do-while 语句中的条件将否定上述条件。

while ( !( 1 <= height && height <= 8 ) );

现在如果要删除你将拥有的否定

while ( !( 1 <= height ) || !( height <= 8 ) );

相当于

while ( 1 > height || height > 8 );

所以要么使用

while ( !( 1 <= height && height <= 8 ) );

pr

while ( 1 > height || height > 8 );

【讨论】:

    【解决方案2】:

    您的条件是“如果height 大于8 并且height 小于1,则继续循环”。该条件永远不会成立,因此循环在第一次迭代后退出。

    您想要的是“如果 height 大于 8 或 height 小于 1,则继续循环”

    while (height > 8 || height < 1);
    

    【讨论】:

    • 天哪,我太笨了。这就是程序员的感觉吗?
    • @Disierd 这就是新事物的感觉,例如一名体操运动员在开始日常训练之前就从平衡木上摔了下来。
    【解决方案3】:

    这些是互斥的:

    while (height > 8 && height < 1);
    

    你可能想要:

    while (height > 8 || height < 1);
    

    现在如果值大于 8 或小于 1,循环将继续进行。

    【讨论】:

      猜你喜欢
      • 2021-03-08
      • 1970-01-01
      • 2018-05-09
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多