循环循环,但仍然难以理解

时间:2015-11-17 06:20:42

标签: c loops cs50

我目前正在通过在线课程CS50。目标是在马里奥的第一层创建一组楼梯,就像下面的主题标签一样。我已经达到了能够打印用户输入高度的高度,但我的循环不会缩进任何标签来制作楼梯。有任何想法吗?

应该是什么样子

   ##
  ###
 ####
#####

我的样子

#
#
#
#

代码:

#include <stdio.h>

int main(void)
{
    int line = 0;
    int blockHeight = blockHeight - 1;
    int space = blockHeight - 1;
    int hashes = 2;

    do
    {
        printf("please give me a number between the range of 1 and 23:\n");
        scanf("%i", &blockHeight);
    }

    while (blockHeight >= 1 != blockHeight <= 23);
    {
        printf("thanks for the correct answer!\n");
    }

    printf("\n\n\n");

    for (int i = 0; i < blockHeight; i++)
    {
        for (int j = 0; j < space; j++)
        {
            printf(" ");
            space--;
            break;
        }

    for (int k = 0; k < hashes; k++)
        {
            printf("#");
            hashes++;
            break;
        }

        for (int z = 0; z < blockHeight; z++)
        {
            printf("\n");
            break;
        }

    }

}

2 个答案:

答案 0 :(得分:1)

while (blockHeight >= 1 != blockHeight <= 23);这不是一个有效的陈述。

  1. 操作数!=未在此类陈述中使用。请改用布尔运算符(&&||)。
  2. 在do-while循环之后,块也有不必要的{}

    单个#的原因是因为无条件break。打印单个空格后会中断。

    for (int j = 0; j < space; j++)
    {
        printf(" ");
        space--;//You don't want to decrement space here
        break;// condition less breaks shouldn't be used. This stat
    }
    

    这同样适用于其他循环

答案 1 :(得分:1)

<强> 1

int blockHeight = blockHeight - 1;
int space = blockHeight - 1;

这是初始化变量的错误方法。 将其更改为

int blockHeight, space;  

获得blockHeight的值后,您可以指定space = blockHeight - 1;(在执行do-while循环后)

<强> 2

do
{
    printf("please give me a number between the range of 1 and 23:\n");
    scanf("%i", &blockHeight);
}
while (blockHeight < 1 || blockHeight > 23); // write `||` instead of `!=`
printf("thanks for the correct answer!\n");

它会运行do直到满足条件。条件满足后,将打印while后写的消息 第3

for (int j = 0; j < space; j++)
{
    printf(" ");
    space--;
    break;
}

将此更改为

for (int j = 0; j < space; j++)
{
    printf(" ");
}
space--;

因为你已经在你的循环中写了break;所以for循环只会运行一次而且会退出循环。

<强> 4

for (int k = 0; k < hashes; k++)
{
    printf("#");
    hashes++;
    break;
}

将此更改为

for (int k = 0; k < hashes; k++)
{
    printf("#");
}
hashes++;

由于break;,它会打印#一次并退出循环。

<强> 5

for (int z = 0; z < blockHeight; z++)
{
    printf("\n");
    break;
}

无需为循环编写此代码。只需一行即可。将其更改为

printf("\n");

<强> 6

int main(void)
{
   ////
   // your code
   ////

    return 0; // write this line at the end
}