3

我尝试了搜索功能,但只发现有关读取逗号/空格分隔文件的问题。

但是,我的问题是,您通常如何处理这个问题。假设我有一个值的列表/数组/...,例如 {1, 2, 3, 4} 并想用分隔符打印它们。

最简单的版本是这样的:

#include <stdio.h>

int main(void)
{
     char list[] = {1, 2, 3, 4};
     unsigned int i;

     for (i = 0; i < 4; ++i)
     printf("%d, ", list[i]);

     return 0;
}

这显然会打印“1, 2, 3, 4,”。我遇到的问题是最后的逗号和空格字符。

现在我可以这样做:

#include <stdio.h>

int main(void)
{
    char list[] = {1, 2, 3, 4};
    unsigned int i;

    for (i = 0; i < 4; ++i)
    {
        printf("%d", list[i]);
        if (i < 3)
            printf(", ");
    }

    return 0;
}

但这似乎不是最好的方法。有人可以指出我正确的方向吗?谢谢

PS:不,我通常不硬编码值
PPS:不,我不是要编写 .csv 文件;)

4

7 回答 7

11

我的标准技术是:

const char *pad = "";
for (int i = 0; i < n; i++)
{
    printf("%s%d", pad, list[i]);
    pad = ", ";
}

有时,pad 的初始值是一个空格,或者一个冒号空格,或者其他在上下文中有效的东西。

于 2010-10-14T18:31:08.877 回答
4

我用这个成语:

assert(n > 0);
printf("%d", list[0]);
for (i = 1; i < n; ++i)
     printf(", %d", list[i]);

它的一个缺点是它不能很好地缩放 n == 0,就像一个简单的循环一样。或者,您可以添加针对 n == 0 的保护:

if (n > 0)
    printf("%d", list[0]);
for (i = 1; i < n; ++i)
     printf(", %d", list[i]);
于 2010-10-14T18:12:36.320 回答
2

我使用 K&R2 中的条件运算符选择了这种格式:

for (i = 0; i < n; i++)
    printf("%d%s", list[i], i+1 < n ? ", " : "\n");
于 2010-10-14T20:13:10.697 回答
1

好吧,即使已经有一个公认的答案,也没有人提出我喜欢的明显答案:

#include <stdio.h>
int main(void) {
    unsigned list[] = {1, 2, 3, 4};
    unsigned const n = 4;
    if (n) for (unsigned i = 0; ; ++i) {
        printf("%d", list[i]);
        if (i >= n) break;
        printf(", ");
    }
    printf("\n");
    return 0;
}
于 2010-10-14T20:35:42.853 回答
0

使用 Michal Trybus 的版本或相反

for (i = 0; i < (n - 1); ++i) 
{
     printf("%d, ", list[i]);
}
printf("%d", list[n - 1]);
于 2010-10-14T18:16:51.633 回答
0
for ( printf("%d",list[i=0]) ; i < n ; printf(", %d", list[++i]) ) ;
于 2010-10-14T19:11:25.510 回答
0

为什么不只是另一个版本,而我们正在使用它。这是我通常做的

for (i=0;i<n;++i)
{
  if (i) printf(", ");
  printf("%d",list[i]);
}
于 2010-10-14T21:04:44.177 回答