【问题标题】:printing specific variable in c a specific way以特定方式在 c 中打印特定变量
【发布时间】:2014-02-07 04:15:20
【问题描述】:

在正确“链接”所有头文件后,我终于可以正确编译我的代码了。当我执行 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;
    //}

}

【问题讨论】:

    标签: c cs50


    【解决方案1】:

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

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

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

    您还计算了paddIt 变量,然后才使用GetInt () 使用值实际初始化它。

    【讨论】:

    • 这很有意义我今天带着我的笔记本电脑上班我会看看我对代码的编辑有什么作用,这是我到目前为止所做的更改。(你告诉我的有道理,但今天早上我有点紧张。)所以我想看看我是否正确解释了你的答案。
    • 在我进行更改后,一切看起来都很好。
    • 在 do 循环中从 usrHeight 中删除 int,然后在 usrHeight = GetInt() 之后设置 paddIt = usrHeight - 1;?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 2014-03-09
    • 1970-01-01
    相关资源
    最近更新 更多