我正在尝试读取文件并将内容存储到2D阵列中以制作棋盘。该文件具有碎片的位置(板状态)。我认为一切都很好,但是运行后,我的构建崩溃了。我没有收到错误消息或导致错误的行,因此我不确定出了什么问题。
我尝试使用不同的scanf和fgets方法,最后我添加了一个“ show”方法来查看板。我认为这使它崩溃了。
int main(int argc, char** argv)
{
FILE *in; //Create 2 file variables
char line[50];
int chessBoard[8][8];
int turn = 0;
in = fopen("board.csv","r");
int true = 1;
void show(int[][8]);
if(in == NULL )
{
printf("The file specified couldn't be opened"
"\nClose program and try again");
true = 0;
return 1;
}
else
{
fscanf(in, "%d", &line);
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
fscanf(in, "%d", &chessBoard[i][j]);
}
}
}
show(chessBoard);
return 0;
}
void show(int chessBoard[8][8])
{
for(int row = 0; row < 8; row++)
{
for(int col = 0; col< 8; col++)
{
printf("%d",chessBoard[row][col]);
if(chessBoard[row][col] < 0)
{
printf(" ");
}
else
{
printf(" ");
}
if(col != 7)
{
printf("|");
}
printf("\n");
}
}
它应该打印出电路板状态,但是当我运行它时,我会“运行失败”。
答案 0 :(得分:1)
无需费心去编译您的源代码,至少有两个明显的错误:
fscanf(in, "%d", &line);
读取一个十进制整数,但是有一个不兼容的参数来存储它。
show(chessBoard[8][8]);
并非呼叫show()
的方式。您只给它一个整数作为参数,该整数另外从chessBoard
的边界中取出。
答案 1 :(得分:0)
嘿,我想我已修复错误,问题是如何保存输入文件。现在,它只输出垃圾。我还编辑了我的“显示”方法。 输出:
这是注释文档中的文件,(我添加了[[]”,因为这是它在数组中的外观)。
a b c d e f g h
8 [-4][-2][-3][-6][-5][-3][-2][-4]
7 [-1][-1][-1][-1][-1][-1][-1][-1]
6 [0][0][0][0][0][0][0][0]
5 [0][0][0][0][0][0][0][0]
4 [0][0][0][0][0][0][0][0]
3 [0][0][0][0][0][0][0][0]
2 [1][1][1][1][1][1][1][1]
1 [4][2][3][5][6][3][2][4]
在@ user3629249帮助下获取我的更新代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_ROWS 8
#define MAX_COLS 8
void show(int board[ MAX_ROWS ][ MAX_COLS ]);
int main(int argc, char** argv)
{
FILE *in; //Create 2 file variables
int line[50];
int chessBoard[ MAX_ROWS ][ MAX_COLS ];
int turn = 0;
in = fopen("board.csv","r");
int true = 1;
if(in == NULL )
{
printf("The file specified couldn't be opened"
"\nClose program and try again");
true = 0;
return 1;
}
else
{
for (int i = 0; i < MAX_ROWS; i++)
{
for (int j = 0; j < MAX_COLS; j++)
{
fscanf(in, "%d", &chessBoard[i][j]);
}
}
}
show(chessBoard);
return 0;
}
void show(int chessBoard[][8])
{
for(int row = 0; row < MAX_ROWS; row++)
{
for(int col = 0; col< MAX_COLS; col++)
{
printf("|");
if(chessBoard[row][col] < 0)
{
printf(" ");
}
else
{
printf("%07d",chessBoard[row][col]);
}
}
printf("|\n");
}
}
答案 2 :(得分:0)
以下建议的代码:
腔体:建议的代码仅输出“正”位置值,并为“负”位置值打印空格
现在是建议的代码
#include <stdio.h>
#include <stdlib.h>
#define MAX_ROWS 8
#define MAX_COLS 8
void show(int board[ MAX_ROWS ][ MAX_COLS ]);
int main( void )
{
int chessBoard[ MAX_ROWS ][ MAX_COLS ];
FILE *in = fopen("board.csv","r");
if( !in )
{
perror( "fopen to read board.csv failed" );
exit( EXIT_FAILURE );
}
for (int i = 0; i < MAX_ROWS; i++)
{
for (int j = 0; j < MAX_COLS; j++)
{
fscanf(in, "%d", &chessBoard[i][j]);
}
}
show(chessBoard);
fclose( in );
return 0;
}
void show(int chessBoard[ MAX_ROWS ][ MAX_COLS ])
{
for(int row = 0; row < MAX_ROWS; row++)
{
for(int col = 0; col < MAX_COLS; col++)
{
printf("|");
if(chessBoard[row][col] < 0)
{
printf(" ");
}
else
{
printf("%4d",chessBoard[row][col]); //edited
}
}
printf("|\n");
}
}