从文本文件 C 获取二维字符数组维度和内容
Getting 2d char array dimensions and content from a text file C
堆栈中有很多这样的问题,但我找不到关于特定问题的问题,因此我决定 post..
我从文本文件中获取输入,该文件的结构始终如下所示:
X Y
A1 A2 AY
A4 A5 ..
AX .. ..
第一行的二维数组的维数和由X行Y列的字符组成的二维数组。
从文本文件的第一行转换到其余行时出现问题。
我的输入代码如下:
#include<stdio.h>
#include<stdlib.h>
int n,m;
int main(int argc,char **argv){
if(argc!=2){
perror("Error: ");
return EXIT_FAILURE;
}
FILE* txtfile=fopen(argv[1],"r");
if(txtfile<0){
perror("Error: ");
return EXIT_FAILURE;
}
char lab[n][m];
fscanf(txtfile,"%d %d",&n,&m);
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
fscanf(txtfile," %c",&lab[i][j]);
}
}
示例输入如下:
3 3
ULD
LUD
LRL
产生结果:
lab[0][0] = L
lab[0][1] = R
lab[0][2] = L
lab[1][0] = L
lab[1][1] = R
lab[1][2] = L
lab[2][0] = L
lab[2][1] = R
lab[2][2] = L
这显然是错误的...
如果我通过终端通过用户输入提供 n,m 或在我的程序中给它们一个值(在本例中为 n=3 和 m=3),然后从文本文件中删除它们:
ULD
LUD
LRL
然后我得到正确的二维数组:
lab[0][0] = U
lab[0][1] = L
lab[0][2] = D
lab[1][0] = L
lab[1][1] = U
lab[1][2] = D
lab[2][0] = L
lab[2][1] = R
lab[2][2] = L
我试过在读取第一行后使用 fseek 将文件中的指针移动到第二行,但没有结果。
感谢任何 help/explanation,我还是 C 的新手。
好吧,回答我自己的问题,并从我自己的愚蠢中吸取教训......
我在实际为 n,m 赋值之前声明了字符数组,导致“数组损坏”。我花了半天的时间认为这是我遗漏的一些令人费解的 C 指针的东西,但事实证明这只是一个业余错误......在发布后 5 分钟才真正想到......
char lab[n][m];
fscanf(txtfile,"%d %d",&n,&m);
是错误的,应该是:
fscanf(txtfile,"%d %d",&n,&m);
char lab[n][m];
我会保留这个问题,以防其他人犯同样的愚蠢错误...
堆栈中有很多这样的问题,但我找不到关于特定问题的问题,因此我决定 post..
我从文本文件中获取输入,该文件的结构始终如下所示:
X Y
A1 A2 AY
A4 A5 ..
AX .. ..
第一行的二维数组的维数和由X行Y列的字符组成的二维数组。
从文本文件的第一行转换到其余行时出现问题。
我的输入代码如下:
#include<stdio.h>
#include<stdlib.h>
int n,m;
int main(int argc,char **argv){
if(argc!=2){
perror("Error: ");
return EXIT_FAILURE;
}
FILE* txtfile=fopen(argv[1],"r");
if(txtfile<0){
perror("Error: ");
return EXIT_FAILURE;
}
char lab[n][m];
fscanf(txtfile,"%d %d",&n,&m);
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
fscanf(txtfile," %c",&lab[i][j]);
}
}
示例输入如下:
3 3
ULD
LUD
LRL
产生结果:
lab[0][0] = L
lab[0][1] = R
lab[0][2] = L
lab[1][0] = L
lab[1][1] = R
lab[1][2] = L
lab[2][0] = L
lab[2][1] = R
lab[2][2] = L
这显然是错误的... 如果我通过终端通过用户输入提供 n,m 或在我的程序中给它们一个值(在本例中为 n=3 和 m=3),然后从文本文件中删除它们:
ULD
LUD
LRL
然后我得到正确的二维数组:
lab[0][0] = U
lab[0][1] = L
lab[0][2] = D
lab[1][0] = L
lab[1][1] = U
lab[1][2] = D
lab[2][0] = L
lab[2][1] = R
lab[2][2] = L
我试过在读取第一行后使用 fseek 将文件中的指针移动到第二行,但没有结果。
感谢任何 help/explanation,我还是 C 的新手。
好吧,回答我自己的问题,并从我自己的愚蠢中吸取教训...... 我在实际为 n,m 赋值之前声明了字符数组,导致“数组损坏”。我花了半天的时间认为这是我遗漏的一些令人费解的 C 指针的东西,但事实证明这只是一个业余错误......在发布后 5 分钟才真正想到......
char lab[n][m];
fscanf(txtfile,"%d %d",&n,&m);
是错误的,应该是:
fscanf(txtfile,"%d %d",&n,&m);
char lab[n][m];
我会保留这个问题,以防其他人犯同样的愚蠢错误...