【问题标题】:creating a string by mixing char[]s and ints in C通过在 C 中混合 char[]s 和 int 创建一个字符串
【发布时间】:2014-05-27 03:51:51
【问题描述】:

我是 C 新手,我正在尝试弄清楚如何创建由长度排列的 char[] 和 int 混合而成的单独字符串 (char[]) -

例如,如果我有 char[] 名字、char[] 姓氏和 int 年龄,我需要它们都在 1 行相同长度的示例 -

乔 |史密斯 |45
艾米 |Footh |2

每一行都是自己的 char[] 并排成一行。

这是我目前的代码 -

while(temp != NULL)
{
    char listLine[IDLEN + FOODNAMELEN + DESCLEN + 10];
    char * id = temp->data->id;
    char * name = temp->data->name;
    int dollars = temp->data->price.dollars;
    int cents = temp->data->price.cents;

    sprintf(listLine,"%s |%s |$%d.%d\n", id, name, dollars, cents);
    printf("%s",listLine);
    temp = temp->next;
}

这工作正常,但我似乎无法排队 |彼此。

我还是堆栈交换的新手,所以我不知道如何标记为作业...但是是的,这是作业。

任何帮助都会很棒。

谢谢

【问题讨论】:

  • 使用 sprintf("%10s%10s... 等等。

标签: c string formatting scanf


【解决方案1】:

您可以将宽度说明符与printf 格式说明符一起使用。

例子:

printf("%3d | %10s", 32, "Hello");

将打印

_32 | _____你好

其中_(下划线)代表一个空格

您还可以使用printf("%*d", width, 32); 将宽度指定为参数。 width 可以由您正在打印的字符串的长度确定。字符串的最大长度可以是您想要的宽度。对于数字,您可以假设没有数字(32 位数字)会大于 10 位(232 有 10 位十进制数)

this

【讨论】:

  • 感谢您的帮助,但如果我有一些 5 个字符的名称和一些 3 个字符的名称,它将无法排列。我将从一系列不同的名称中打印,因此它必须具有响应性。抱歉,我希望这是有道理的。
  • 非常感谢!这是一个巨大的帮助!
【解决方案2】:

如果您尝试将这些排列在管道字符 ('|') 上,那么您可以对数据进行第一次传递以确定每个字段的最大字符长度,然后在第二次传递时,空格填充每个短于最大值的字段,以便在所有字段都已格式化后,每个字段的长度将完全相同。

或者,您可以确定每个字段的最大长度,然后使用 printf() 语句对其进行格式化。

【讨论】:

    【解决方案3】:

    听起来你想要添加标签?您可以通过添加 \t

    添加选项卡
    "%s \t|%s \t|$%d.%d\n"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      相关资源
      最近更新 更多