以矩阵形式输出2D数组

时间:2019-07-01 05:28:32

标签: c

我需要打印/创建(.CSV格式)大小为1940(R)x 512(C)的数组。我有一个大型程序,其中此矩阵是通过使用其他不同的矩阵创建的。执行时,它将所有数据显示在一行中。我需要.csv或excel格式的数据才能使用它。

有人可以帮我在这里做什么吗?

printf("\n")命令适用于以矩阵形式在屏幕上打印,但是在输出文件中,它们全部在一行中。

for ( i = 0; i < 1940; i++ ) {
    for ( j = 0; j < 512; j++ ) {
        fprintf(pFile,",%d\t ",X7[i][j]);
        //printf("%d\t ", X8[i][j]);     
    }
    printf("\n");
}

3 个答案:

答案 0 :(得分:3)

您需要将“换行符”写入文件,而不是控制台。 代替

printf("\n");

fprintf(pFile, "\n");

答案 1 :(得分:1)

在您的示例中,您使用:

fprintf(pFile,",%d\t ",X7[i][j]);

您应该使用

fprintf(pFile,"%d,",X7[i][j]);

在数据之后使用逗号代替TAB +空格,因为它是逗号分隔的文件。使用这种方法,最后您将有一个空白列,但这应该不是一个大问题。


代替

printf("\n");

使用

fprintf(pFile,"\n");

答案 2 :(得分:1)

请勿使用\t(制表符)字符,这会导致每个值之间使用制表符和逗号定界符(我可以看到给定libreoffice或excel合适的值(它是.csv还是制表符分隔文件?)

传统上,您将输出带条件的逗号分隔值,以防止在每行的开头放置逗号。您只需要以下内容:

for (int i = 0; i < 1940; i++) {                /* loop over rows */
    for (int j = 0; j < 512; j++) {             /* loop over columns */
        if (j > 0)                              /* if not 1st in row */
            fprintf (pFile, ",%d", ,X7[i][j]);  /* add "," before val */
        else
            fprintf (pFile, "%d", ,X7[i][j]);   /* no comma */
    }
    fputc ('\n', pFile);     /* add newline at end of each row */
}