【问题标题】:Align text to right in C在C中将文本右对齐
【发布时间】:2014-10-26 22:09:08
【问题描述】:

我有点挣扎如何让我的输出显示如下:

  a
 aa
aaa

我当前的输出显示了这个:

a
aa
aaa

下面是我的代码:

void displayA(int a){
    for(int i = 0; i < a; i++)
        printf("a");
}

int main(void){
    displayA(1);
    printf("\n");
    displayA(2);
    printf("\n");
    displayA(3);
    printf("\n");
    return 0;
}

有什么建议吗?谢谢。

感谢您的回答。我意识到我的编码逻辑是错误的。使用下面的建议帮助我弄清楚了。谢谢!

【问题讨论】:

  • 试试printf("%3s", "a");
  • 提示:你的displayA 函数需要两个参数。要打印的 a 的数量和列宽
  • 我之前试过了,还是不行。 @Don'tYouWorryChild
  • @thelaws 介意举个例子吗?谢谢。

标签: c string output


【解决方案1】:

您可以使用printf("%*s", &lt;width&gt;, "a"); 打印由变量号右对齐的任何文本。空间。

检查here live

【讨论】:

  • 感谢您的发帖。希望这会对我有所帮助。只是好奇您是否有其他涉及 for 循环的解决方案?我不想使用硬编码。谢谢!建议会很棒!
  • @Salman2013:“我不想使用硬编码。”你不想使用什么?
【解决方案2】:
void staircase(int n) {
    int counter = n-1;
    for(int i = 1; i <= n; i++){
        for(int m = 0; m < counter; m++){
            printf(" ");
        }
        for(int a = 0; a < i; a++){
            printf("%c", '#');
        }
        counter--;
        printf("\n");
    }
}

如果我们把函数称为staircase(6);

打印出来:

     #
    ##
   ###
  ####
 #####
######

【讨论】:

    【解决方案3】:

    文本右对齐是这样完成的:

    printf("%3s", some_text);
    

    3 表示行的最大长度为 3。

    左对齐文本是相反的:

    printf("%-3s", some_text);
    

    【讨论】:

      【解决方案4】:

      这里的参数w 决定了字符宽度以对齐a

      void displayA(int a, int w){
        int i;
        for(i = 0; i < w; i++) {
          if( i < w - a ) printf(" ");
          else printf("a");
        }
      }
      

      【讨论】:

        【解决方案5】:

        这可能会有所帮助。

        打印楼梯图案:

             #
            ##
           ###
          ####
         #####
        ######
        

        以下是代码:

        #include<stdio.h>
        
        void print(int n)
        {   int i,j;
            for(i=1;i<=n;i++)
            {     printf("%*s",n-i,"");   //for right alignment by n-1 spaces.
                 for(j=0;j<i;j++)
                 {
                          printf("%s","#");    
                 }   
                 printf("\n");  
            }   
        }    
        int main(void)
        {   
            print(6);   
            system("pause"); 
            return 0;   
        } 
        

        【讨论】:

          【解决方案6】:

          我对您所做的void displayA() 做了一些小改动:

          void displayA(int a)
          {
              for(int i = 0; i < 3; i++)
              {
                  if (i >= 3 - a)
                  {
                      printf("a");
                  }
                  else
                  {
                      printf(" ");
                  }
              }
          }
          

          上面写的代码可以正常工作。

          还有其他方法,也可以用来代替我在您所做的void displayA() 中所做的更改。您可以简单地设置行的宽度并右对齐要打印的文本。

          但是,你制作的整个程序,连同我对函数的修改,将被限制为三个字母。

          【讨论】:

            猜你喜欢
            • 2011-04-18
            • 1970-01-01
            • 2019-04-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-06
            • 2012-09-17
            • 2012-11-26
            相关资源
            最近更新 更多