在C中将文件读入2D数组

时间:2017-03-01 04:09:43

标签: c

这是一个基本问题,但我的代码似乎有些麻烦。我试图从文本文件中读取并打印完全相同的数字到控制台。 我得到一个段错误,有人可以把我推向正确的方向吗?

基本上我想在屏幕上打印完全相同的数字(不包括'4')。

/*
My text file simply says the following:

4 //number of rows
1 3 5 7
3 5 7 1
5 7 1 3
7 1 3 5
*/

#include <stdio.h>
#include <stdlib.h>

int main(){

FILE *fptr = fopen("key.txt", "r");
int inputs,i,j;
int matrix[5];
fscanf(fptr, "%d", &inputs);
for(i=0; i<inputs; i++){
    for(j=0; j<4; j++){
        fscanf(fptr, "%d", &matrix[j]);
        printf("%d ", matrix[j]);
        printf("\n");
    }
}



return 0;
}

3 个答案:

答案 0 :(得分:0)

您需要在内部循环中打印一个空格,在外部循环中打印换行符,以便以与文件相同的格式输出输出。

for(i=0; i<inputs; i++){
    for(j=0; j<4; j++){
        fscanf(fptr, "%d", &matrix[j]);
        printf("%d ", matrix[j]);
        printf(" ");
    }
    printf("\n");
}

编辑:我刚刚在IDE中运行它并且工作正常并且在屏幕上以与您显示文件完全相同的方式打印。如果您遇到分段错误,您的实际文件内容与您向我们展示的内容不同。请显示key.txt文件的实际内容。

答案 1 :(得分:0)

少数事情:

1)我认为如果当前目录中不存在add(或key.txt上面不包含您的示例数据),您的代码只能导致分段错误。因此请确保该文件存在正确的内容。

2)尝试进行防御性编程,这意味着:检查您是否确实成功打开了文件并获得了有效的key.txt

FILE *

3)如果要定义矩阵,则需要2D数组

FILE *fptr = fopen("key.txt", "r");
if (fptr == NULL){
   fprintf(stderr, "Error, could not open the file!");
   return -1;
}

答案 2 :(得分:0)

原始代码中的问题是 int matrix [5]

您正在根据示例文本文件读取超过5个值。 基本问题是声明一个足够大的数组来容纳你将要读取的数值。你如何确定这取决于你。

根据您的示例文本文件,请考虑以下内容。

/*
My text file simply says the following:

4
1 3 5 7
3 5 7 1
5 7 1 3
7 1 3 5
*/

#include <stdio.h>
#include <stdlib.h>

#define NCOL 4
#define MAX_ROWS 10

int main ( void )
{
    FILE *fptr;
    int number_rows;
    int i, j;
    int matrix[MAX_ROWS][NCOL];

    fptr = fopen("key.txt", "r");
    if ( fptr == NULL )
    {
       printf("Error: failed to open file key.txt\n\n");
    }
    else
    {
       fscanf(fptr, "%d", &number_rows);
       if ( number_rows <= 0 )
       {
          printf("Error: value read for number of rows is %d\n\n", number_rows );
       }
       else if ( number_rows > MAX_ROWS )
       {
          printf("Error: value entered for number rows > MAX_ROWS\n\n");
       }
       else
       {
          for ( i = 0; i < number_rows; i++ )
          {
             for ( j = 0; j < NCOL; j++ )
             {
                fscanf(fptr, "%d", &matrix[i][j] );
             }
          }
       }
       fclose( fptr );
    }

    /* if the above failed because key.txt could not be read,
       then we will be printing out bogus numbers below.
    */

    for ( i = 0; i < number_rows; i++ )
    {
       for ( j = 0; j < NCOL; j++ )
       {
          printf("%d ", matrix[i][j]);
       }
       printf("\n");
    }

    return 0;
}