我的 do while 循环不满足这两个要求

my do while loop isnt meeting both requirements

当我试图获取我的变量的输入时,它只满足一个要求(即:< 1 要求)并跳过另一个要求,即使我使用 && 运算符。

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

int main(void)
{
    int x;
    do {
        x = get_int("what is the height of the pyramid?:");
    } while (x > 0 && x < 8);
    printf("%i", x);
}

我尝试只使用 x < 8 作为要求,但当我输入 91011 等时它仍然通过

如果你想让x之间0和8之间(两端互斥),那么你需要在这个条件[=20时重复请求输入=]不满意。

换句话说,当x超出这个范围时,意味着x小于或等于0 大于或等于8 .

也就是说,我认为该问题集的正确输入范围实际上是 1-8(包括两端):

do {
    x = get_int("What is the height of the pyramid?: ")
} while (x < 1 || x > 8);

测试与你的意图恰恰相反。 do/while 条件应测试重复输入的条件并写入 while (!(x > 0 && x < 8)); 或等同于:while (x < 1 || x >= 8);

不清楚您的要求是什么,但似乎数量应该在 17 之间(含)。如果应包含 8,则应将测试修改为 while (!(x > 0 && x <= 8)); 或等同于:while (x < 1 || x > 8);

do/while 循环通常令人困惑且容易出错。我建议在满足条件时使用 for(;;) 又名 for ever 循环和 break 语句:

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

int main(void)
{
    int x;
    for (;;) {
        x = get_int("What is the height of the pyramid? ");
        if (x == INT_MAX) {
            printf("Input error or end of file\n");
            return 1;
        }
        if (x > 0 && x < 8) {
            break
        }
        printf("The height should be between 1 and 7\n");
    }
    printf("%i\n", x);
    return 0;
}