我正在学习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句子或做一些不同的事情以获得该输出?
答案 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]
的 值。在值之前/之后可能要打印三种内容:
因此,您可以查看自己的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
。