通过在C中混合char []和int来创建一个字符串

时间:2014-05-27 03:51:51

标签: c string formatting scanf

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

例如,如果我有char []名字,char []姓氏和int age我需要它们全部在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;
}

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

我仍然是堆叠交换的新手,所以我不确定如何标记作业...但是这是作业。

任何帮助都会很棒。

由于

3 个答案:

答案 0 :(得分:1)

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

示例:

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

将打印

_32 | _____你好

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

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

请参阅this

答案 1 :(得分:0)

如果您尝试将这些字符排在管道字符('|')上,那么您可以首先传递数据以确定字符中每个字段的最大长度,然后在第二遍中, space-pad每个字段都比它的最大值短,这样当所有字段都被格式化后,每个字段的长度都完全相同。

或者,您可以确定每个字段所需的最大长度,然后使用printf()语句格式化这些字段。

答案 2 :(得分:0)

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

来添加标签
"%s \t|%s \t|$%d.%d\n"