我在试图编写一个快速程序时遇到了一些问题,这个程序的目的是,给出一个矩阵(二维数组),将其保存到一个文件中。在检查结果输出文件时,在文件的每一行末尾给出以下simbols,以粗体和红色表示"\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;
}问题就在我写文件的方式上吗?如果是这样的话,有人能帮我解决吗?
发布于 2017-12-18 15:53:46
代码的第一个问题是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之后,检查是否为NULL 。这是个坏主意,如果f是NULL,它可能/会导致程序崩溃。相反,将检查作为函数中的第一件事:
int save_to_file (char** mat, unsigned n, unsigned m, FILE* f){
if (f == NULL) return -1;
....
....
return 0;
} 第三个问题是访问矩阵的方式。如果您的矩阵是一个2D数组(当您在文本中写入而不张贴代码时),则不能以char**的形式正确地访问它。当您有指向字符数组的char指针数组时,可以使用char**。但不是二维数组。
下面是函数如何基于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可以很容易地更改它。
https://stackoverflow.com/questions/47871245
复制相似问题