如何从C中的文件扫描二维数组? [关闭]

问题描述 投票:-2回答:2

我正在尝试从.txt文件中扫描二维数组,然后在返回平均值的函数中使用,但它不起作用。我也是C的新手,所以任何帮助都会非常感激。

我已经尝试过直接输入行数和列数,但什么都没有出现。

(我包括stdio.h和stdlib.h)

int main(int argc, char *argv[]){
    FILE *f;
    int A[5][5], ave;

    if ((f = fopen("program4.txt", "r")) == NULL) {
       printf ("The file could not be opened\n");
       return 1;
    }

    readfileintomatrix(A, 2, 3, f);
    ave = averagevalue(A, 2, 3);
    printf ("The average value is %d\n", ave);

    return 0;
}

void readfileintomatrix (int M[][5], int r, int c, FILE *f) {
    int i, j;

    for (i = 0; i < r; i++) {
        for (j = 0; i < c ; j++) {
            fscanf (f, "%d", &M[i][j]);
        }
    }
}

int averagevalue (int M[][5], int r, int c) {
    int i, j;
    int sum = 0;
    int average = 0;
    for (i = 0; i < r; i++) {
        for (j = 0; j < c ; j++) {
            sum += M[i][j];
        }
    }
    average = sum/ (r*c);
    return average;
}

我文件中的矩阵是

0 2 4 6 8 10

我期望输出为5,但我什么都没得到

c
2个回答
1
投票

readfileintomatrix函数中的循环条件不正确,因此你的readfileintomatrix函数永远不会终止:

for (i = 0; i < r; i++) {
    for (j = 0; i < c ; j++) { // << should be for(j = 0; j < c; j++) instead of i < c
        fscanf (f, "%d", &M[i][j]);
    }

将此更改为

for (i = 0; i < r; i++) {
    for (j = 0; j < c ; j++) { 
        fscanf (f, "%d", &M[i][j]);
    }

产生正确的行为。


0
投票
#include<stdio.h>  
#include<conio.h>  
int main(int argc, char *argv[]){  

    FILE *f;
    int A[5][5], ave;

    if  ((f = fopen("program4.txt", "r")) == NULL) {
       printf ("The file could not be opened\n");
       return 1;
    }
    printf ("The file is opened\n");
    A[5][5]=readfileintomatrix(A, 2 , 3 , f);
    ave = averagevalue(A, 2, 3);
    printf ("The average value is %d\n", ave);
    fclose(f);
    return 0;
}

int readfileintomatrix(int M[][5], int r , int c ,FILE *f) {
    int i, j;

    for (i = 0; i < r; i++) {
        for (j = 0; j < c ; j++) {
            fscanf(f, "%d", &M[i][j]);
            printf("hello\n");
        }
    }

    return M;
}

int averagevalue(int M[][5], int r, int c) {
    int i, j;
    int sum = 0;
    int average = 0;
    for (i = 0; i < r; i++) {
        for (j = 0; j < c ; j++) {
            sum += M[i][j];
        }
    }
    average = sum/ (r*c);
    return average;
}
© www.soinside.com 2019 - 2024. All rights reserved.