Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将文本文件读入二维数组_C_File_Multidimensional Array_Scanf - Fatal编程技术网

C 将文本文件读入二维数组

C 将文本文件读入二维数组,c,file,multidimensional-array,scanf,C,File,Multidimensional Array,Scanf,我有一个文本文件,行和列中只有随机字母。我想做的就是制作一个2d数组,这样它就是puzzle[I][j]如果我把printf(“%c”,puzzle[5][4])放在哪里它只会给我第4行和第3列字符(因为它在数组中从0开始)。这是到目前为止我的代码 #define MAXROWS 60 #define MAXCOLS 60 #include <stdio.h> #include <string.h> #include <stdlib.h> #i

我有一个文本文件,行和列中只有随机字母。我想做的就是制作一个2d数组,这样它就是
puzzle[I][j]
如果我把
printf(“%c”,puzzle[5][4])放在哪里它只会给我第4行和第3列字符(因为它在数组中从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");
    }


}
#定义最大行60
#定义MAXCOLS 60
#包括
#包括
#包括
#包括
main()
{
文件*TableFilePtr;
char TableFileName[100];
char文件名[100];
字符拼图[MAXROWS][MAXCOLS];
printf(“请输入表格文件名:”);
scanf(“%s”,TableFileName);
TableFilePtr=fopen(TableFileName,“r”);
if(TableFilePtr==NULL)
{
printf(“无法打开%s”,TableFileName);
退出(退出失败);
}
字符词;
int n;
n=0;
int i,j,row,col;
int行计数,colcount;
printf(“\n有多少行和列?用空格分隔:”);
scanf(“%d%d”,行和列);
/*while(fscanf(TableFilePtr、%c、&words)!=EOF)
{
printf(“%c”,字);
}
*/

/*对于(colcount=0;colcount我会这样做(我没有使用所有精确的变量名,但您知道了):

char-puzzle[MAXROWS][MAXCOLS],line[MAXCOLS];
文件*填充;
int cols=0,rows=0;
/* ... */
infle=fopen(表文件名,“r”);
while(fgets(线条、线条尺寸、填充)!=NULL)
{

对于(cols=0;colsuve混淆了您对数组索引的理解,这是打字错误吗?请注意,
puzzle[5][4]
打印第六行和第五列中的值,而不是第四行和第三列中的值,这正是因为索引从0开始。这是数组索引越界的C(通常)。请记住,计数从0开始,因此如果您声明
int myArray[10]
,元素为0-9。如果您尝试访问
myArray[10]
,则会出现seg err。这就是我所说的
的意思,您可能需要调整拼图[](使用MAXCOLS+/-n
)。
for(colcount=0;colcount<col;colcount++){...}
    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;
    }
    for(c=0; c<MAXROWS; ++c){
        fgets(puzzle[rows], sizeof puzzle[rows], infile);
    }