2013-03-22 123 views
0

我有一个只有行和列中的随机字母的文本文件。我想要做的就是制作一个二维数组,这样它的puzzle[i][j]如果我把printf("%c", puzzle[5][4]);它简单地给我第四行和第三列字符(因为它从一个数组中的0开始)。这是我的代码到目前为止。将文本文件读入二维数组

#define MAXROWS  60 
#define MAXCOLS  60 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <math.h> 

main() 
{ 
    FILE *TableFilePtr; 
    char TableFileName[100]; 
    char PuzzleFileName[100]; 
    char puzzle[MAXROWS][MAXCOLS]; 
    printf("Please enter the table file name: "); 
    scanf("%s",TableFileName); 

    TableFilePtr=fopen(TableFileName, "r"); 

    if(TableFilePtr == NULL) 
    { 
     printf("Can't open %s", TableFileName); 
     exit(EXIT_FAILURE); 
    } 

    char words; 
    int n; 
    n=0; 
    int i,j,row,col; 
    int rowcount, colcount; 
    printf("\n how many rows and colums are there? separate by a space: "); 
    scanf("%d %d",&row, &col); 
    /* while(fscanf(TableFilePtr,"%c",&words)!= EOF) 
    { 
     printf("%c",words); 
    } 
    */ 

    /*for (colcount=0;colcount<col;colcount++) 
    { 
     for (rowcount=0;rowcount<row;rowcount++) 
     { 
      printf("%c ",words); 
     } 
    printf("\n"); 
    } 
    */ 


    for(i=0;i<row;i++){ 
     for(j=0;j<col;j++){ 
      fscanf(TableFilePtr, "%c %s\n",&puzzle[i]][j]); 
       //puzzle[i][j]=words; 
    //   printf("%c ", puzzle[i][j]); 
     } 
     printf("\n"); 
    } 


} 

末注释的区域(刚开始的部分)的作品简单地打印出的文本文件中的编译器。尽管如此,我想让它成为2d数组。

for(colcount=0;colcount<col;colcount++){...} 
+0

uve混淆了你对数组索引的理解,是一个错字? – 2013-03-22 01:22:42

+0

请注意,'拼图[5] [4]'在第六行和第五列打印值,而不是第四行和第三列的值 - 正是因为索引从0开始。 – 2015-12-17 16:53:57

回答

0

我会做这样的事情(我没有使用你所有的确切变量名的,但你的想法):

char puzzle[MAXROWS][MAXCOLS], line[MAXCOLS]; 
    FILE *infile; 
    int cols = 0, rows=0; 

    /* ... */ 

    infile = fopen(TableFileName, "r"); 

    while(fgets(line, sizeof line, infile) != NULL) 
    { 
     for(cols=0; cols<(strlen(line)-1); ++cols) 
     { 
      puzzle[rows][cols] = line[cols]; 
     } 
     /* I'd give myself enough room in the 2d array for a NULL char in 
      the last col of every row. You can check for it later to make sure 
      you're not going out of bounds. You could also 
      printf("%s\n", puzzle[row]); to print an entire row */ 
     puzzle[rows][cols] = '\0'; 
     ++rows; 
    } 

编辑:更短的版本将有新行和NULL字符在每一行的结尾,除非你手动选取它们。你可能需要调整谜题[] [](使用MAXCOLS +/- n或其他类型)来使它适合你。

for(c=0; c<MAXROWS; ++c){ 
     fgets(puzzle[rows], sizeof puzzle[rows], infile); 
    } 

在循环结束时,puzzle[x][y]应的字符从输入文件的2D阵列。希望有所帮助。

+0

这有助于我获得分割错误 – Alex 2013-03-25 02:25:53

+0

这是数组索引越界(通常)的C值。请记住,计数从0开始,因此如果声明'int myArray [10]',则元素为0-9。如果你尝试访问'myArray [10]',你会得到seg errr。 – JB0x2D1 2013-03-26 00:56:33

+0

这就是我的意思'你可能需要调整谜题[] [](使用MAXCOLS +/- n')。 – JB0x2D1 2013-03-26 01:04:50