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

int main(void)
{
    int n;
    do
    {
        n = get_int("height: ");
    }
    while(n<1&&n>8);
    for (int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            printf("#");
        }
        printf("\n");
    }
}

我正在编写一个程序来打印带有散列的正方形,但是我在 Do 循环中的 while 不起作用。我希望它只接受 1 到 8 之间的值(包括 1 和 8),但是如果我从参数中输入值,它不会工作并且不会再次提示。但是如果我只在 while 循环中放置一个参数,它就可以工作,例如n<1。请帮助我,我是初学者。

4

3 回答 3

2

答案很简单,与编程无关,只是简单的数学和逻辑

while(n<1&&n>8)

如果n低于1则不能同时8大于

于 2020-11-30T09:13:53.957 回答
2

不工作的原因while( n<1 && n>8);为了清楚起见,请参阅图像。交叉点没有价值。我的意思是没有数字,小于一大于八。

在此处输入图像描述

解决方案while(n < 1 || n > 8);用于n1 到 8(含)之间的值。

于 2020-11-30T09:15:51.433 回答
0

没有这样的数字会同时小于 1 和大于 8。:)

n<1&&n>8

正确编写循环条件的一种简单方法是首先编写一个数字应满足的条件。那是

1 <= n && n <= 8

然后对条件应用否定

do { /*...*/ } while ( !( 1 <= n && n <= 8 ) );

然后使用您可以编写的逻辑操作规则

do { /*...*/ } while ( !( 1 <= n ) || !( n <= 8 ) );

最后

do { /*...*/ } while ( ( 1 > n ) || ( n > 8 ) );

或者

do { /*...*/ } while ( n < 1 || n > 8 );
于 2020-11-30T09:30:31.910 回答