将矩阵保存为C中的文件(.txt格式)

时间:2017-12-18 15:10:22

标签: c file matrix

我在编写一个快速程序时遇到了一些问题,目的是给定一个矩阵(二维分配的二维数组),将其保存到文件中。当检查结果输出文件时,我在文件的每一行的末尾给出了以下的符号,用粗体和红色表示“\ 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;
}

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

1 个答案:

答案 0 :(得分:0)

代码的第一个问题是for循环中的范围。如果您有n行,则循环必须从0转到n-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之后,您检查NULLf 。这是一个坏主意,如果fNULL,它可能/会导致程序崩溃。而是将检查作为函数中的第一件事:

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

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

下面是该函数如何根据2D数组查找矩阵的示例。

#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

轻松更改