以特定方式打印特定变量

时间:2014-02-07 04:15:20

标签: c cs50

在正确地“链接”我的所有头文件后,我终于达到了能够正确编译我的代码的程度。当我做了mariov1.c(代码如下所示)时,我使用了20的测试输入,结果是打印出3个哈希标记然后显示我的cmd行像这样

###[xvp@localhost ~]$

现在它应该有21个空格和2个哈希标记的输出添加一个哈希标记并且每行减去一个空格,直到hashmarks的数量= 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;
    //}

}

1 个答案:

答案 0 :(得分:2)

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

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

usrHeight是范围内的本地。一旦控件超出此范围并使用usrHeight,它实际上是您在函数main范围内定义的变量。从int

中删除int usrHeight = GetInt();

此外,在使用paddIt使用值初始化GetInt ()之前,您已经计算了{{1}}变量。