从文件中恢复列/行矩阵

时间:2018-12-22 15:29:10

标签: c

所以我有这个程序,可以从文件中扫描和打印矩阵。无论如何,我拥有的程序都可以使用普通矩阵工作,我的意思是正方形矩阵,但是现在我想制作一个手动矩阵,我的意思是我必须输入行数/列数,然后再在主菜单中调用行数和列数。 因此,以下程序说明了这种情况

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个值,因此无法调用列。 希望你明白我的意思,谢谢。

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;
}