我需要一些帮助,我想打印出文件中的信息(字符)
我决定使用2D数组,因为数据看起来像这样
0 0 . . .
0 0 . . .
. . . . .
. . . . .
. . . . .
似乎我无法使用我现在准备的代码打印出来
请参阅以下内容:
/* Read from file, pass on file contents to a 2D array, Print file contents from 2D array*/
#include<stdio.h>
#include<string.h>
#define N 5
//My proposed function to print an array with contents from a file
void printboard(int **a, int n, int n);
int main(int argc, char *argv[])
{
char linestr[100];
int board[N][N];
int k;
int h=0, l=0;
if(argc==2) //File should be called from the terminal hence working with argc & argv
{
FILE *fp;
fp = fopen(argv[1], "r");
if(fp == NULL)
{
printf("Error, can't open '%s' file!!!\n", argv[1]);
return -1;
}
while (fgets(linestr,sizeof linestr, fp) != NULL)
for(k=0; k<strlen(linestr); k++)
{
if (linestr[k]!='\n')
{
board[h][l]=(int)linestr[k];
l++;
}
h++;
l=0;
}
fclose(fp);
}
printboard(board,h,l);
return 0;
}
void printboard(int **a, int n, int n)
{
int i, j;
for (i=0; i< N; i++)
{
for (j=0; j< N; j++)
{
printf("%c", a[i][j]);
}
printf("\n");
}
}
我对C语言非常基础,并且仅在1.5个月前开始编码。社区有什么建议我如何解决这个问题或者做得更好?目的是以2D数组格式打印文件的内容。我真的希望数据能够用于2D数组,因为我需要进一步研究它,以便在一个名为Peg Solitaire的游戏中移动'0'。
答案 0 :(得分:1)
函数中的参数名称必须是唯一的。所以你的printboard函数不能有两个“n”参数,你必须改变一个名字(“m”或其他东西)。此外,由于您正在打印n x n矩阵并且已经通过预处理器定义了“N”,您是否还需要这些参数? :)
数组的传递(printboard的第一个参数)有点棘手,需要一些关于指针和内存如何工作的知识。请参见此处的讨论:
http://cboard.cprogramming.com/c-programming/97898-passing-2-dimensional-array-function.html
归结为将函数定义更改为:
void printboard(int a[][N], int m, int n);
一件小事:为了打印您的数字,您可能希望将它们打印为整数而不是字符,这样您就应该更改
printf("%c", a[i][j]);
到
printf("%d ", a[i][j]);
我添加了空格,以便在打印到终端时数字会一起运行。
就解析输入而言,这是一个完整的话题。当你从文件中读取它们时,我建议strtok分解你的行。然后你将使用像sscanf这样的东西将数据存储到你的电路板阵列中。见这些参考:
http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/ http://www.cplusplus.com/reference/clibrary/cstring/strtok/
答案 1 :(得分:0)
我只是在猜测你想要在字段为空时显示点(。) 所以预填充你的电路板阵列。
char board[N][N]; // i changed it to char, was int but char is enough
memset(board, '.', sizeof(board));