4

我是编程新手,希望能得到一些帮助。我正在尝试在 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 运算符的工作原理。

4

3 回答 3

3

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

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

while (height > 8 || height < 1);
于 2020-06-19T22:01:25.863 回答
2

这些是互斥的:

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

你可能想要:

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

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

于 2020-06-19T22:00:41.490 回答
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 ) );

公关

while ( 1 > height || height > 8 );
于 2020-06-19T23:19:42.737 回答