如何在C中右对齐金字塔?

问题描述 投票:0回答:1

我刚刚开始 CS50 课程,目前没有编码经验,我觉得我做得“还好”,但是我正在尝试完成创建“右对齐金字塔”的附带任务,因为我已经完成了我认为的左对齐金字塔这很容易,但我正在努力思考需要做什么。

你能帮忙吗 - 理想情况下寻找代码的更新以及它如何影响结果,而不仅仅是答案,因为我想了解更改和推理。

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

void print_row(int length);

int main(void)
{
int height = get_int("Height: ");
for (int i = 0; i \< height; i++)
{
print_row(i + 1);
}
}

void print_row(int length)
{

for (int g = 0 ; g \< length; g++)

     {

printf(" ");
}

for (int h = 0; h \< length; h++)

     {

printf("#");
}

printf("\\n");
}
cs50
1个回答
0
投票

我意识到您只是想要评论中的一些指示,而不是完整的答案,但由于我似乎没有在这里传达思考过程,所以让我提供用于打印所需高度的金字塔的代码的重构版本基于您包含的代码。以下是重构后的代码。

#include <stdio.h>
#include <stdlib.h>

void print_row(int length, int ht)
{
    for (int g = 0 ; g < (ht - length); g++)    /* Print needed spaces for the padding based upon the requested height  */
    {
        printf(" ");
    }

    printf("/");                                /* Print the left leaning slash prior to printing hash character(s)     */

    for (int h = 0; h < (length * 2 - 1); h++)
    {
        printf("#");                            /* Print the correct amount of hash characters based upon height        */
    }

    printf("\\\n");                             /* Finish up with printing the right leaning backslash                  */
}

int main(void)
{
    int height;

    printf("Height: ");                         /* Don't have CS50 installed - so just use a prompt and scanf           */
    scanf("%d", &height);

    for (int i = 0; i < height; i++)
    {
        print_row(i + 1, height);
    }

    return 0;
}

以下是我试图谈论的一些观点,评论中也指出了这一点。

  • 似乎正在尝试仅用一个因素(长度)来确定空格数,但似乎要正确了解空格数,需要将高度作为值传递给任何打印函数。
  • 了解函数所在的级别可以更简单地确定何时打印正斜杠,然后知道要打印多少个哈希符号,然后能够打印反斜杠。
  • 此外,显然需要更多的经验来理解反斜杠作为“printf”函数中的转义字符的用法,因此需要三个反斜杠字符来打印单个反斜杠,后跟换行符组合。

以下是一个快速示例测试,我认为这是基于我之前处理过的“打印金字塔”问题的所需输出。

craig@Vera:~/C_Programs/Console/Pyramid_CS50/bin/Release$ ./Pyramid_CS50 
Height: 3
  /#\
 /###\
/#####\
craig@Vera:~/C_Programs/Console/Pyramid_CS50/bin/Release$ ./Pyramid_CS50 
Height: 6
     /#\
    /###\
   /#####\
  /#######\
 /#########\
/###########\

我在这里看到的要点可能是深入研究可用的“C”教程文献,无论是已出版的还是在线的,并更加熟悉诸如反斜杠转义组合之类的东西。

© www.soinside.com 2019 - 2024. All rights reserved.