[英]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]) );
也就是說數組a
的ith
元素是要(覆蓋)寫入的元素。 所以如果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.