【问题标题】:How can I print multiple character with one printf?如何用一个 printf 打印多个字符?
【发布时间】:2015-08-31 16:13:59
【问题描述】:

我想使用printf 打印多个字符。我目前的做法是这样的——

#include <stdio.h>

int main()
{
    printf("%*c\n", 10, '#');

    return 0;
}

但这只会在 # 之前打印 9 个空格。

我想这样打印-

##########

我无法弄清楚如何做到这一点。请帮我?

【问题讨论】:

  • @Olaf 我知道我可以通过大量搜索得到答案。但它们都长而难以理解。在这里,我在几分钟内得到了答案。这个网站不是问这种问题的吗?
  • 好吧,在询问之前,您应该自己做出合理的努力。否则 SO 将很快成为一个教程站点,这绝对不是有意的。如果您在理解方面有基本问题,最好退后一步阅读一本书或在线教程。如果那是家庭作业,你应该问你的导师。一个好的人会欣赏反馈并采用他的课程来回答问题。
  • 对于格式字符串:这在几句话中说得很清楚。一个更合适的答案可能是关于这种格式选项的实际工作方式。无论如何,你得到了答案。
  • @Olaf 好的。有时您需要快速回答才能继续前进。这就是为什么我把它贴在这里。下次我会更加小心。

标签: c printf


【解决方案1】:

你不能像printf那样在Ansi C中打印重复的字符。我建议你使用这样的循环-

#include <stdio.h>

int main()
{
    int i;
    for(i = 0; i < 10; i++) putchar('#');

    return 0;
}

或者如果你完全不想使用循环,你可以这样做-

#include <stdio.h>
int main()
{
    char out[100];
    memset(out, '#', 10);
    out[10] = 0;
    printf("%s", out);

    return 0;
}

顺便说一句,像这样使用printf也可以-

#include <stdio.h>

int main()
{
    printf("%.*s", 10, "############################################");

    return 0;
}

【讨论】:

    【解决方案2】:

    如果您对要输出的字符数有上限,我认为最好的方法是:

    printf("%.*s", number_of_asterisks_to_be_printed,
    "**********************************************************************");
    

    我认为这也是最有效、最便携的方式。

    【讨论】:

      【解决方案3】:

      这将打印十个 # 字符,后跟一个换行符

      char tenPounds[] = "##########"; 
      printf( "%s\n", tenPounds);
      

      【讨论】:

      • 我事先不知道需要打印多少个字符。但顺便说一句,非常感谢。
      • 对于您的解决方案,只需使用puts(thenPounds); 打印,您将获得相同的十个字符,并带有尾随换行符。无需进一步格式化任何内容。
      【解决方案4】:

      我正在研究“C 编程语言”一书中的类似问题(练习 1-13 和 1-14)。我自己的程序,简单来说,是计算给定输入中数字 0 到 9 的出现次数,并根据每个计数打印由“=”条组成的水平直方图。

      为此,我创建了以下程序;

      main() {
          int c, ix, k;
          int nDigit[10];
      
          //Instantiate zero values for nDigits array
          for(ix = 0; ix < 10; ix++) {
              nDigit[ix] = 0;
          }
      
          //Pull in input, counting digit occurrences and 
          //incrementing the corresponding value in the nDigit array
          while ((c = getchar()) != EOF) {
              if (c >= '0' && c <= '9') {
                  ++nDigit[c-'0'];
              }
          }
      
          //For each digit value in the array, print that many
          //'=' symbols, then a new line when completed
          for (ix = 0; ix < 10; ix++) {
              k = 0;
              while (k <= nDigit[ix]) {
                  putchar('=');
                  k++;
              }
              printf("\n");
          }
      

      }

      请注意,这是一项正在进行的工作。正确的直方图应包含轴标签,最重要的是,该程序不考虑零计数的数字。如果输入包含五个 1 但没有 0,则没有直观的方式表明我们没有零。尽管如此,打印多个符号的机制仍然有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-08
        • 1970-01-01
        • 2017-05-29
        • 1970-01-01
        • 2015-04-10
        • 1970-01-01
        相关资源
        最近更新 更多