打印带有“,”和“ {}”的格式化数组

时间:2018-10-29 07:08:06

标签: c

我试图打印格式化的int数组

#include <stdio.h>
#define SIZE 3
int arr[SIZE] = {1, 2, 3};

int main(void)
{   
    printf("{");
    for (int i =0; i < SIZE; i++ )
    {   
        printf("%d, ", arr[i]);
    }
    printf("}");
    printf("\n");

}

但是发现很难

$ ./a.out
{1, 2, 3, }

附加逗号。

是否可以轻松地完成这样的任务?

5 个答案:

答案 0 :(得分:4)

鉴于C中不允许使用零长度数组(因此arr[0]始终存在),并且您已经有了用于括号的显式代码,这种解决方案在我看来是合理的:

int main(void)
{   
    printf("{%d", arr[0]);
    for (size_t/*better type for array index*/ i = 1; i < SIZE; ++i)
    {   
        printf(", %d", arr[i]);
    }
    printf("}\n");
}

参考:What is the correct type for array indexes in C?

答案 1 :(得分:2)

以下方法在if循环中完全没有任何for条件的情况下执行。

想法只是循环到i < SIZE-1并在循环外打印最后一位。

int i=0 ;
printf("{");
for (i =0; i < SIZE-1; i++ )
{
    printf("%d, ", arr[i]);
}
printf("%d}", arr[i]);
printf("\n");

答案 2 :(得分:0)

尝试一下:

#include <stdio.h>
#define SIZE 3
int arr[SIZE] = {1, 2, 3};
int main(void)
{   
    printf("{");
    for (int i =0; i < (SIZE-1); i++ )
    {
        printf("%d, ", arr[i]);
    }
    printf("%d}\n", arr[SIZE-1]);
}

答案 3 :(得分:-1)

您也可以尝试以下方法:

#include <stdio.h>
#define SIZE 3
int arr[SIZE] = {1, 2, 3};

int main(void)
{
    printf("{");
    for (int i =0; i < SIZE; i++ )
    {
    printf("%d", arr[i]);
        if(i < (SIZE - 1)){
            printf(", ");
        }
    }
    printf("}");
    printf("\n");
}

答案 4 :(得分:-1)

代码需要将数组的第一个或最后一个元素视为特殊情况。为了将第一个元素视为特殊字符,代码应在每个数字之前打印一个逗号和空格,但仅打印数字时,第一个元素除外。

这可以通过三元运算符完成。考虑三元表达式:

i ? ", " : ""

i不为零时,表达式的计算结果为一个包含逗号和空格的字符串。但是,当i为零时,结果为空字符串。因此,i == 0是特例。

代码如下:

int main(void)
{
    printf("{");
    for (int i = 0; i < SIZE; i++)
    {
        printf("%s%d", i ? ", " : "", arr[i]);
    }
    printf("}\n");
}