所以我有这个程序,可以从文件中扫描和打印矩阵。无论如何,我拥有的程序都可以使用普通矩阵工作,我的意思是正方形矩阵,但是现在我想制作一个手动矩阵,我的意思是我必须输入行数/列数,然后再在主菜单中调用行数和列数。 因此,以下程序说明了这种情况
int recuperation (int t[][20], char *nomFichier){
int nbElement=0 ,i,j,nbElement2=0;
FILE *fp;
fp=fopen(nomFichier,"r");
if(fp!=NULL)
{
fscanf(fp,"%d\n",&nbElement);
fscanf(fp,"%d\n",&nbElement2);
if(nbElement && nbElement2)
{
for(i=1;i<=nbElement;i++)
{
for(j=1;j<=nbElement2;j++)
{
fscanf(fp,"%d",&t[i-1][j-1]);
}
}
}
}
else
printf("\n Fichier vide \n");
return nbElement;
}
您看到退货了吗? nbElement是行数,但我也想返回列数,即nbElement2。 因为稍后在main()中,我必须通过键入以下内容来调用此函数: l =恢复(t,txtfile) 但由于我只返回了1个值,因此无法调用列。 希望你明白我的意思,谢谢。
答案 0 :(得分:1)
最好的办法是提供列和行作为函数的指针。这样,当您为这些变量分配值时,它们也会在函数外部更改。
int recuperation (int t[][20], char *nomFichier, int * rows, int * columns){
int i,j;
FILE *fp;
fp=fopen(nomFichier,"r");
if(fp!=NULL)
{
fscanf(fp,"%d\n",rows);
fscanf(fp,"%d\n",columns); // already a pointer
if(*rows && *columns) // dereference the pointer to get the value
{
for(i=1;i<=*rows;i++)
{
for(j=1;j<=*columns;j++)
{
fscanf(fp,"%d",&t[i-1][j-1]);
}
}
}
}
else
printf("\n Fichier vide \n");
return 0;
}