【问题标题】:Is there any method for C language to control length of characters by using a variable?C语言有什么方法可以通过变量来控制字符的长度吗?
【发布时间】:2018-07-28 00:08:39
【问题描述】:

这是我的代码:

#include <stdio.h>
int main(void)
{
    printf("%220s\n", "Hello, beautiful world!");
    printf("%232s\n", "Hello, beautiful world!");
    printf("%333s\n", "Hello, beautiful world!");
    printf("%444s\n", "Hello, beautiful world!");
    printf("%555s\n", "Hello, beautiful world!");

    return 0;
}

这需要大量打字,并且可能充满错误。

我正在考虑使用一个变量来控制字符串可以占用多少空间。

以下代码

 #include <stdio.h>
int main(void)
{

    int a[5] = {220, 232, 333, 444, 555};

    for (int i = 0; i < 5; i++)
        printf("%%ds\n", a[i], "Hello, beautiful world!");

    return 0;
}

似乎没有达到我的预期。

我哪里做错了?

C语言有什么方法可以通过变量来控制字符的长度吗?

【问题讨论】:

  • printf(“%*s\n”, a[i], “…”);
  • 乔纳森·莱弗勒,谢谢。有用。那个方法叫什么?
  • 不确定;如果有名字,它可能在手册中。我在没有手册的飞机上。
  • C 标准没有给它命名。它在 C 2011 7.21.6.1 5 中有所描述。

标签: c string variables


【解决方案1】:

您可以使用 * 说明符来指定最小字段宽度。有关信息,请阅读man page for printf上的格式字符串格式部分

#include <stdio.h>
int main(void)
{
    int a[5] = {220, 232, 333, 444, 555};

    for (int i = 0; i < 5; i++)
        printf("%*s\n", a[i], "Hello, beautiful world!");

    return 0;
}

【讨论】:

  • 对于 C 问题,最好参考 C 标准而不是 Linux 手册页。
  • C 标准没有在网上公开,只有最终草案(n1570 for C11n1256 for previous C99)是公开的。 Linux 手册页项目页面得到积极维护,并包含一个 符合 部分,该部分确实描述了每个功能定义在哪些标准中; GNU 和 Linux 的细节都有明确的标记。因此,我略微不同意@EricPostpischil:我们可以链接到标准草案(理论)或手册页(实践)。我说最好链接到both
  • @NominalAnimal:Linux 手册页可能会记录它们符合哪些规范,但这还不够。如果 X 的行为集是 Y 允许的行为集的子集,则 X 符合 Y。但 X 不揭示 Y-X,即 Y 允许但 X 未展示的行为集。学习“ Linux 手册页中的 C 做 X” 可以继续编写一些他们希望在 C 中工作的代码,只是因为它在与 Linux 不同但符合 C 标准的实现上失败。 C 标准的正确参考是 C 标准。
  • @EricPostpischil:也许,但事实仍然存在,我们只能访问最终草案,而不是 C 标准本身。您可能喜欢language-lawyerism,但我们其他人必须使用多种资源来找到理论与实践之间的黄金路径。请注意,我链接到上述标准草案的网络可访问副本;我不是在推动任何一种来源,而是为了使用多个参考来源
  • @NominalAnimal:正如M.M 所说,在 Stack Overflow 上引用草案是可以接受的。但公众无法获得该标准的说法是不正确的。是的,当前版本costs CHF 198 (USD 200)。对于任何使用 C 来赚取收入的人或任何依赖该标准或希望他们的用户依赖他们用它生产的软件的人来说,这并不是一笔大笔开支。如果学生继续使用草案直到他们被雇用,那很好。如果一个人处于另一种情况并且负担不起......
猜你喜欢
  • 2020-07-06
  • 2017-11-02
  • 1970-01-01
  • 2013-01-23
  • 2022-11-27
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
  • 2014-12-08
相关资源
最近更新 更多