【问题标题】:How to print a char repeatedly using format specifier instead of loop? [duplicate]如何使用格式说明符而不是循环重复打印字符? [复制]
【发布时间】:2020-12-14 22:28:08
【问题描述】:

我想重复打印一个字符'*',我给出的不是。星号应该重复的次数。

示例: count = 20 我想使用printf()格式说明符打印********************

【问题讨论】:

  • this 回答你的问题了吗?
  • 我想要 count =n 的代码,而不是像 20 这样的小常数。我举了一个例子。

标签: c printf format-specifiers


【解决方案1】:

当然没有办法仅使用格式说明符来实现。你可以在宏中隐藏你的循环,但你肯定需要一个循环。

【讨论】:

  • 重复引用证明并非如此。
  • 据我了解,它没有。重复接受的答案显示%0*d,然后用*(在循环中)替换0,但OP专门询问instead of loop
  • @KamilCuk 看第二个答案
【解决方案2】:

您无法使用printf() 提供的标准格式说明符来做到这一点。但是,如果您愿意浪费一些空间在程序中存储填充字符串,则有一个 hacky 解决方案(假设最大填充长度是合理的)。

#include <stdio.h>

int main(void) {
    const char *fill = "********************"; // 20 chars

    printf("%.*s\n", 10, fill);
    printf("%.*s\n", 15, fill);

    int n = 20;
    printf("%.*s\n", n, fill);

    return 0;
}

这使用.* 来提供要打印的字符串的最大长度作为第一个参数。

输出:

**********
***************
********************

注意:您最多只能得到strlen(fill) 填充字符(上例中为20 个),更多字符和printf 将停止在fill\0 终止符处.

【讨论】:

  • 这回答了问题,但我很确定在大多数情况下不应该使用它。
  • @Puck 这绝对不是惯用的,但有时即使在 C 语言中你也需要一个快速而肮脏的解决方案。我认为这是最接近 OP 想要的。
  • @Marco Boneli 在一定程度上回答了我的问题。除此之外,您能否介意为我提供 count 等于某个未知值 'n' 的解决方案,而不是像 20 这样的已知常数?我想通过避免循环来克服时间复杂度的问题。
  • @anonymous 您可以只使用变量而不是数字:printf("%.*s\n", n, fill)
【解决方案3】:

我希望这是您正在寻找的:

#include <stdio.h>
int main()
{
printf("%.*s", 20, "********************************");;
  return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 2022-01-17
    • 1970-01-01
    • 2021-07-13
    相关资源
    最近更新 更多