首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以C格式将矩阵保存到文件(.txt格式)

以C格式将矩阵保存到文件(.txt格式)
EN

Stack Overflow用户
提问于 2017-12-18 15:10:22
回答 1查看 2.4K关注 0票数 0

我在试图编写一个快速程序时遇到了一些问题,这个程序的目的是,给出一个矩阵(二维数组),将其保存到一个文件中。在检查结果输出文件时,在文件的每一行末尾给出以下simbols,以粗体和红色表示"\00“。这是我的密码:

代码语言:javascript
复制
   /*\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;
}

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

EN

回答 1

Stack Overflow用户

发布于 2017-12-18 15:53:46

代码的第一个问题是for循环中的范围。如果有n行,则循环必须从0转到n-1 (都包括在内)。所以这些台词:

代码语言:javascript
复制
for(i = 0;i <= n; i++)
    for(j = 0; j <= m; j++)
        if(j == m)

应该是

代码语言:javascript
复制
for(i = 0;i < n; i++)          // Remove =
    for(j = 0; j < m; j++)     // Remove =
        if(j == m-1)           // Insert -1

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

代码语言:javascript
复制
int save_to_file (char** mat, unsigned n, unsigned m, FILE* f){
    if (f == NULL) return -1;
    ....
    ....
    return 0;
} 

第三个问题是访问矩阵的方式。如果您的矩阵是一个2D数组(当您在文本中写入而不张贴代码时),则不能以char**的形式正确地访问它。当您有指向字符数组的char指针数组时,可以使用char**。但不是二维数组。

下面是函数如何基于2D数组查找矩阵的示例。

代码语言:javascript
复制
#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;
}

输出:

代码语言:javascript
复制
abc
def

注意:上面的函数输出到stdout,而不是一个文件,但是使用fprintf可以很容易地更改它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47871245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档