gpt4 book ai didi

c - 在 C 中将矩阵保存到文件(.txt 格式)

转载 作者:行者123 更新时间:2023-11-30 16:37:30 24 4
gpt4 key购买 nike

我在尝试编写一个快速程序时遇到一些问题,其目的是给定一个矩阵(动态分配的二维数组),将其保存到文件中。检查生成的输出文件时,我在文件每一行的末尾给出以下粗体和红色的符号“\00”。这是我的代码:

   /*\param n number of rows
\param m number of columns
\param mat pointer to the matrix
\param f file already opened in write mode where to write the matrix
*/
int save_to_file (char** mat, unsigned n, unsigned m, FILE* f){

int i, j;

for(i = 0;i <= n; i++)
for(j = 0; j <= m; j++)
if(j == m)
fprintf(f, "%c\n", mat[i][j]);
else
fprintf(f, "%c", mat[i][j]);
if (f == NULL)
return -1;
else
return 0;
}

问题出在我在文件上写入的方式吗?如果是这样的话,有人可以帮我解决吗?

最佳答案

代码的第一个问题是 for 循环中的范围。如果有 n 行,则循环必须从 0n-1(两者都包含)。所以这些行:

for(i = 0;i <= n; i++)
for(j = 0; j <= m; j++)
if(j == m)

应该是

for(i = 0;i < n; i++)          // Remove =
for(j = 0; j < m; j++) // Remove =
if(j == m-1) // Insert -1

第二个问题是,在使用f之后检查f是否为NULL。这是一个坏主意,如果 fNULL,它可能会导致程序崩溃。相反,将检查作为函数中的第一件事:

int save_to_file (char** mat, unsigned n, unsigned m, FILE* f){
if (f == NULL) return -1;
....
....
return 0;
}

第三个问题是访问矩阵的方式。如果您的矩阵是二维数组(正如您在文本中编写而没有发布代码),则无法将其作为 char** 正确访问。当您有一个指向字符数组的字符指针数组时,可以使用 char** 。但不适用于二维数组。

下面是该函数如何查找基于二维数组的矩阵的示例。

#include <stdio.h>

int save_to_file (unsigned n, unsigned m, char mat[n][m]){

int i, j;

for(i = 0; i < n; i++)
for(j = 0; j < m; j++)
if(j == m-1)
printf("%c\n", mat[i][j]);
else
printf("%c", mat[i][j]);
}

int main(void) {

char a[2][3] = {{'a','b','c'},{'d','e','f'}};
save_to_file(2,3,a);
return 0;
}

输出:

abc
def

注意:上面的函数打印到 stdout 而不是文件,但可以使用 fprintf 轻松更改。

关于c - 在 C 中将矩阵保存到文件(.txt 格式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47871245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com