如何用C正确写入文件?

时间:2019-01-29 03:06:22

标签: c

我正在学习C语言中的基本编程,并且在文件编写练习中遇到问题。问题是要以以下方式在文件中写入方阵: 每行的前两个数字应以“,”分隔,然后分别写入其余数字。

这是一个相当简单的练习,但是我只是在学习,我留下了一些缺陷。我希望你能帮助我。

#include <stdio.h>
int main(){
FILE *data;
int matrix[4][4] = {
    {1,2,3,4},
    {2,3,5,6},
    {9,8,4,5},
    {5,3,1,2}
};
data = fopen("output.txt","w");
for (int i = 0; i < 4; ++i)
{
    for (int j = 0; j < 4; ++j)
    {   
        if(matrix[i][0]>=0&&matrix[i][j+1]<4)
        {
        fprintf(data, "%d,%d ",matrix[i][j],matrix[i][j+1]);
        }
        else
            fprintf(data, "%d ",matrix[i][j]);
    }
    fprintf(data, "\n");
    }
   fclose(data);
 return = 0;
 }

我知道我最大的错误是if语句的条件,但是我不知道如何针对这种情况正确编写。

我想获得此输出:

1,2 3 4
2,3 5 6
9,8 4 5
5,3 1 2

我该如何修正if句子或做一些不同的事情以获得该输出?

2 个答案:

答案 0 :(得分:2)

您很亲近,但是逻辑有点错,尝试一次打印一个,然后检查for循环的内部索引是否为0索引,然后在末尾添加逗号。

在return语句上,您还提供了要返回的值,因此:return 0;您不能分配返回值

希望有帮助,我确实使用过printf,然后将其更改回fprintf,所以可能会出现错误,您可能需要修复

#include <stdio.h>

int main(){

    FILE *data;
    int matrix[4][4] = {
        {1,2,3,4},
        {2,3,5,6},
        {9,8,4,5},
        {5,3,1,2}
    };
    data = fopen("output.txt","w");

    for (int i = 0; i < 4; ++i)
    {
        fprintf(data, "%d,", matrix[i][0]);
        for (int j = 1; j < 4; ++j)
        {   
            fprintf(data, "%d ", matrix[i][j]);
        }
        fprintf(data, "\n");
    }
    return 0;
 }

答案 1 :(得分:1)

有两种获取所需东西的方法。

最明显的方法是同时发出所有4个值:

for (int i = 0; i < 4; ++i) {
    int i0 = matrix[i][0];
    int i1 = matrix[i][1];
    int i2 = matrix[i][2];
    int i3 = matrix[i][3];

    fprintf(data, "%d,%d %d %d\n", i0, i1, i2, i3);
}

另一种方法是使用基于j的值的条件语句,而不是基于matrix[i][j] 值。在值之前/之后可能要打印三种内容:

  1. 什么都没有/换行符
  2. 逗号
  3. 空间

因此,您可以查看自己的j值,并打印适当的字符串(不是字符,因为“ nothing”不是字符,而是{{1} }是空字符串。

""

随着您变得更加自信,可以使用三元表达式初始化for (int i ... for (int j = 0; j < 4; ++j) { const char * before = ""; if (j == 1) before = ","; if (j > 1) before = " "; fprintf(data, "%s%d", before, matrix[i][j]); } fprintf(data, "\n"); } 字符串。

您也可以改用“之后”字符串,这样可以消除循环后多余的before