【问题标题】:C - Attempting to add one more space than the previous line in a loopC - 尝试在循环中比上一行多添加一个空格
【发布时间】:2012-10-14 01:26:21
【问题描述】:

我想在每个新行的开头添加一个额外的空格。当前输出为:

$****
 $***
  $**
   $*
    $
     Press any key to continue . . .

我想要的是:

$****
 $***
  $**
   $*
    $
Press any key to continue . . .

我添加了 for 循环!它看起来几乎完美,除了“按任意键继续...”消息是选项卡。如何解决这个问题?

代码:

for(r=1; r<=5; r++) {
  printf("$");
  for(c=1; c<=5;c++) {
    if(6-r<=c) {
      printf(" ");
    } else {
      printf("*");
    }
  }
  printf("\n");
  n++;
  for (f=0;n>f;f++)
    {
        printf(" ");
    }
}

【问题讨论】:

  • stackoverflow.com/a/276869/986924 有一个示例和有用的链接。
  • 你能给我们打印“按任意键”语句的代码段吗?
  • 我正在使用 Visual Studio 并在它说的命令提示符窗口中执行代码后“运行无调试”; “按任意键继续 。 。 。”。我的程序没有说要这样做。
  • 所以您根本不希望它说“按任意键继续”?
  • 好吧,看到link解决方案就在这里,只需转到页面并点击提交按钮,代码将运行,您可以检查输出。

标签: c for-loop


【解决方案1】:

您可以在编写$ 时使用变量左填充的技巧:

printf("%*s", r, "$");

字符串格式字段中的* 可让您指定填充宽度。

【讨论】:

  • 这不会打印星号,但这是朝着正确方向迈出的一大步。
  • 我还没有学到任何关于字符串或如何在课堂上使用它们的知识。我确信这是一个很好的方法,但我不知道实际发生了什么或如何实现它。
  • 你们俩...这是您打印单个 $ 的行的替代品。我认为没有必要包含打印*s 的其余代码,因为我不需要修改它:ideone.com/uftrQ2
【解决方案2】:

好吧,您的问题本身就得到了答案,“如何说 printf(" "); 'n' 次” 说 printf 'n' 次的最简单方法是运行它 'n' 次,就像如何您要求程序打印 '*' (6-r) 次!

这是一个非常简单的代码,可以帮助您获得所需的输出

#include<stdio.h>
void main()
{
    int r,c,n=0;

    for(r=1; r<=5; r++)
    {
        for(c=n;c>0;c--)
        {
            printf(" ");

        }
        printf("$");
        for(c=1; c<=5;c++)
        {
            if((6-r)<=c)
            {
                printf(" ");
            }
            else
            {
                printf("*");
            }
        }

        printf("\n");
        n++;

    }
}

如果您想查看代码,请转到Codepad.org here you can run your code and see the output

【讨论】:

  • 谢谢大家和大家!你们都非常有帮助。
【解决方案3】:

目前您的n++; 什么都不做。对于print(" ") n 次,您需要使用类似 for 循环的东西。这样做的一种方法:打印空格的数量,然后打印你需要的星星数量,应该是 4 - n。

#include <stdio.h>

int main(int argc, char *argv[]) {
    int r;
    int c;
    int n = 0;
    for(r=1; r<=5; r++)
    {
        for (int i = 1; i<=n; i++) { //Print " " n number of times.
            printf(" ");
        }
        printf("$"); //Print dollar sign.
        for(c=0; c<(4-n);c++) //Print * 4-n times.
        {
            printf("*");
        }
        printf("\n");
        n++;

    }
}

【讨论】:

    【解决方案4】:

    最简单的形式:只打印空格,然后是“$”,然后是星号。

    int r, c;
    for(r=0; r<5; r++) {
      for(c=0; c<r; c++){
        printf(" ");
      }
      printf("$");
      for(c=r+1; c<5;c++) {
          printf("*");
      }
      printf("\n");
      n++;//What is this here for?
    }
    

    你可以用一个很棒的 printf 技巧来减少它(已经由其他人提交,所以我不会在这里讨论它:

    int r, c;
    for(r=0; r<5; r++) {
      printf("%*s", r+1, "$");
      for(c=r+1; c<5;c++) {
          printf("*");
      }
      printf("\n");
      n++;//What is this here for?
    }
    

    但是等等,还有更多!使用句点 (.),您可以强制截断字符串,因此:

    int r;
    for(r=1; r<6; r++) {
      printf("%*s%.*s\n", r, "$", 5-r, "*****");
    }
    

    砰!将整个事情归结为一个声明!

    【讨论】:

    • n 作为计数器存在。这更有意义,因为我部分解决了我的问题。现在“按任意键”消息是选项卡,我希望它是左对齐的。
    • @CorySTG 查看我的答案的新版本。
    • 另外,将来我想更改它,以便用户输入行数以使此模式继续。而且由于我还没有学过字符串,所以我宁愿远离这个,除非它很容易理解。
    猜你喜欢
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多