【问题标题】:taking output 2D array in matrix form以矩阵形式输出二维数组
【发布时间】:2019-07-01 05:28:32
【问题描述】:

我需要打印/创建(.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");
}

【问题讨论】:

  • 您还需要将'\n' 写入文件。
  • CinCout 感谢您的回答,但请您详细说明一下
  • 如果您使用 Windows 并使用记事本查看文件,那么 \n 可能还不够。记事本使用\r\n 作为换行符。尝试首先在 Notepad++ 或比经典记事本更高级的工具中查看您的文件。您可以在此处了解更多信息:*.com/questions/10034585/…
  • 我在 Linux 系统上使用并尝试查看文本或 Libre office writer/calc 中的数据

标签: c


【解决方案1】:

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

printf("\n");

fprintf(pFile, "\n");

【讨论】:

  • 感谢 Stephan Lechner 但现在它显示在一列中(所有数据)。我认为使用此命令 fprintf(pFile, "\n"); 在每个字符后放置一行
  • 感谢 Stephan Lechner...我用错了,但现在可以了,非常感谢
【解决方案2】:

在您的示例中,您使用:

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

你应该使用

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

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


代替

printf("\n");

使用

fprintf(pFile,"\n");

【讨论】:

  • 总是有两个for循环,一次只是没有格式化为上面的代码
  • 您的替代方案在相邻字段之间放置了两个逗号 (fprintf(pFile, ",%d,", X7[i][j]);),这是错误的。除了每行的第一个值外,您应该在输出值前面加上逗号,这是很容易争论的。有很多方法可以实现这一目标。我的首选是const char *pad = ""; for (…) { fprintf(pFile, "%s%d", X7[i][j]); pad = ","; } fprintf(pFile, "\n");
  • 又是我的错,看来我今天不应该做任何危险的事情——考虑到我(缺乏)对细节的关注:)
【解决方案3】:

不要使用\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 */
}

【讨论】: