簡體   English   中英

從文本文件 C 獲取 2d 字符數組維度和內容

[英]Getting 2d char array dimensions and content from a text file C

堆棧中有很多這樣的問題,但我找不到關於特定問題的問題,因此我決定發布..
我從一個結構如下的文本文件中獲取輸入:

X Y
A1 A2 AY
A4 A5 ..
AX .. ..

第一行二維數組和由 X 行 Y 列字符組成的二維數組的維度。
從文本文件的第一行轉換到 rest 時出現問題。
我的輸入代碼如下:

#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 的新手。

好吧,回答我自己的問題,並從我自己的愚蠢中學習......我在實際將值分配給 n,m 之前聲明了字符數組,從而導致“數組損壞”。 我花了半天的時間認為這是我遺漏的一些令人費解的 C 指針的東西,但事實證明這只是一個業余錯誤......在發布后 5 分鍾字面意思是......

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

是錯誤的,應該是:

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

我會保持這個問題不被刪除,以防其他人犯同樣的愚蠢錯誤......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM