首页 > 解决方案 > 为什么此代码中会产生 6# 标记?

问题描述

我有一个需要解释的问题。

当我运行下面的代码时,会要求我输入 3 个值:高度、宽度和宽度二。如果我输入 1 表示高度,2 表示宽度,2 表示宽度二,则仅在一行上产生 6 个 # 标记,例如“######”——显然没有引号。我不明白为什么要生产 6 个。我希望 4 # 标记是产品。请帮忙!

使用上述值运行后,###### 将成为产品。

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

int main(void)
{
    int height = get_int("Height of Pyramid?");
    int width = get_int("Length of Width?");
    int widthtwo = get_int("Length of Widthtwo?");
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {   
            for (int a = 0; a < widthtwo; a++)
            {
                printf("#");
            }

            printf("#");
        }
        printf("\n");
    }
}

标签: ccs50

解决方案


删除第二个 printf("#"); 线。这是添加两个额外的 # 因为它在 j 循环中每次都被调用。

for (int i = 0; i < height; i++)
{
    for (int j = 0; j < width; j++)
    {   
        for (int a = 0; a < widthtwo; a++)
        {
            printf("#");   // Executed 1*2*2 times 
        }

        printf("#");       // Executed 1*2 times - Remove this line
    }
    printf("\n");
}

这可以帮助您将其可视化:

i j a
0 0 0 #
0 0 1 ##
0 0 1 ### (last # is from 2nd printf)
0 1 0 ####
0 1 1 #####
0 1 1 ###### (last # is from 2nd print)

推荐阅读