簡體   English   中英

在 C 中讀取文件到矩陣

[英]Reading a file to matrix in C

我得到

“調試斷言失敗”

當我嘗試編譯此代碼時出錯。

有人可以解釋一下它有什么問題嗎? 我想我在 fscanf 函數上做錯了。 謝謝你。

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
void input(FILE *fp, int **a,int m)
{
    int i,j;
    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
        {
            fscanf(fp, "%d\n", *(a+i)+j);
        }
    }
}

int main()
{
    FILE*fp;
    int m,n,**a,i,j;
    scanf("%d",&m);
    fp=fopen("abc.txt","r");
    a=(int**)malloc(m*sizeof(int*));
    for(i=0;i<m;i++)
        *(a+i)=(int*)malloc(m*sizeof(int));
    input(fp,a,m);
    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
        {
            printf("%d ",*((a+i)+j));
        }
        printf("\n");
    }
    free(a);
    return 0;
}

這里有幾個問題,但要直接回答您的問題,您沒有向fscanf()提供地址,它將存儲它找到的整數。

不知道你的意圖,我舉個例子:

fscanf( fp, "%d\n", &(a[i]) );

也就是說數組aith元素是要(覆蓋)寫入的元素。 所以如果a[i]是一個 int 指針,你可能會在那里傳遞 &( (a[i])[j] ) 。

另外,我認為您打算替換:

*(a+i)=(int*)malloc(m*sizeof(int));

a[i] = (int*) malloc(m*sizeof(int));

其他評論和答案已經指出了什么是不對的。 所以我跳過它( fscanf(...)free等)。

修正后的版本。

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

void input(FILE *fp, int **a, int m) {
    int i, j;
    for (i = 0; i < m; i++) {
        for (j = 0; j < m; j++) {
            fscanf(fp, "%d\n", &a[i][j]);
        }
    }
}

int main() {
    FILE *fp;
    int m, n, **a, i, j;
    scanf("%d", &m);
    fp = fopen("abc.txt", "r");
    a = (int**) malloc(m * sizeof (int*));
    for (i = 0; i < m; i++)
        a[i] = (int*) malloc(m * sizeof (int));
    input(fp, a, m);
    for (i = 0; i < m; i++) {
        for (j = 0; j < m; j++) {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
    for (i = 0; i < m; i++)
        free(a[i]);
    free(a);
    return 0;
}

暫無
暫無

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

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