【问题标题】:Getting 2d char array dimensions and content from a text file C从文本文件 C 中获取 2d char 数组维度和内容
【发布时间】:2021-06-24 07:28:40
【问题描述】:

堆栈中有很多这样的问题,但我找不到关于具体问题的问题,因此我决定发布..
我从一个结构如下的文本文件中获取输入:

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 在读取第一行后将文件中的指针移动到第二行,但没有结果。
感谢任何帮助/解释,我还是 C 的新手。

【问题讨论】:

    标签: arrays c scanf


    【解决方案1】:

    好吧,回答我自己的问题,并从我自己的愚蠢中学习...... 我在将值实际分配给 n,m 之前声明了字符数组,从而导致“损坏的数组”。我花了半天的时间认为这是我遗漏了一些令人费解的 C 指针的东西,但事实证明这只是一个业余错误......从字面上看是在发布后 5 分钟......

    char lab[n][m];
    fscanf(txtfile,"%d %d",&n,&m);
    

    错了,应该是:

    fscanf(txtfile,"%d %d",&n,&m);
    char lab[n][m];
    

    我会保持这个问题不被删除,以防其他人犯同样的愚蠢错误......

    【讨论】:

      猜你喜欢
      • 2015-03-14
      • 1970-01-01
      • 2012-10-31
      • 2022-07-10
      • 2015-07-07
      • 2021-02-07
      • 2014-08-11
      • 2011-03-23
      • 1970-01-01
      相关资源
      最近更新 更多