在正确地“链接”了我所有的头文件之后,我终于可以正确地编译我的代码了。当我执行mariov1.c(代码如下所示)时,我使用了20个测试输入,结果是打印出3个井号,然后像这样显示我的cmd行

###[xvp@localhost ~]$

现在应该有一个21个空格和2个哈希标记的输出,每个哈希标记添加一个哈希标记,并在每行中减去一个空格,直到哈希标记的数量= usrHeight(实际上,它实际上不是由哈希数决定的,但是仍然可以工作)方式)。应该看起来像这样。

How High?
10
constructing...
         ##
        ###
       ####
      #####
     ######
    #######
   ########
  #########
 ##########
###########


这将使其保持正确对齐。

mariov1.c来源

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

int main(void)
{
    int usrHeight = 0;
    int levelCounter = 0;
    int paddIt = usrHeight - 1;
    int hashCounter = 2;


    do
    {
        printf("How high?\n");
        int usrHeight = GetInt();
    }
    while ( usrHeight > 23 || usrHeight < 0);
    if ( usrHeight >= 0 && usrHeight <= 23);
    {
        printf("constructing...\n");

    }
    for (levelCounter = 0; levelCounter <= usrHeight; levelCounter++)
    {
            printf("%.*s\n", paddIt, "");
            for (int i = 0; i <= hashCounter; i++)
                putchar('#');
            paddIt = paddIt - 1;
            hashCounter = hashCounter + 1;
    }

}


我在这次错误之后做了第二次尝试,使用了另一个do while循环,中间使用for循环(肯定是我做错了),但是它只是连续地用哈希填充终端,所以我不确定在哪里去点。

这是mariov2.c源代码



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

int main(void)
{
    int usrHeight = 0;
    int levelCounter = 0;
    int paddIt = usrHeight - 1;
    int hashCounter = 2;


    do
    {
        printf("How high?\n");
        int usrHeight = GetInt();
    }
    while ( usrHeight > 23 || usrHeight < 0);
    if ( usrHeight >= 0 && usrHeight <= 23);
    {
        printf("constructing...\n");

    }
    //doing a test to see if this do while loop will handle this appropriatelly
    do
    {
        printf("%.*s\n", paddIt, "");
            for (int i = 0; i <= hashCounter; i++)
        {
            putchar('#');
            paddIt = paddIt - 1;
            hashCounter = hashCounter + 1;
            levelCounter = levelCounter + 1;
        }
    }
    while ( levelCounter <= usrHeight );
    //commented area part of original code
    //for (levelCounter = 0; levelCounter <= usrHeight; levelCounter++)
    //{
        //  printf("%.*s", paddIt, "");
        //  for (int i = 0; i <= hashCounter; i++)
        //      putchar('#');
        //  paddIt = paddIt - 1;
        //  hashCounter = hashCounter + 1;
    //}

}

最佳答案

首先要注意的是,循环中使用的usrHeight始终为0,因为在段中

do
{
    printf("How high?\n");
    int usrHeight = GetInt();
}
while ( usrHeight > 23 || usrHeight < 0);


usrHeight对于while范围是局部的。一旦控件超出此范围并且您使用usrHeight,它实际上就是您在main函数范围内定义的变量。从int删除int usrHeight = GetInt();

同样,在实际使用paddIt对其进行初始化之前,已经计算了GetInt ()变量。

关于c - 以特定方式打印特定变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21619219/

10-11 06:29