C 将数字从文本文件读入动态分配的二维数组

C 将数字从文本文件读入动态分配的二维数组,c,pointers,C,Pointers,首先,我不是要求别人帮我做家庭作业,只是为了帮助我完成一个我卡住的部分。 第二,我不是C语言专家,所以请原谅任何不符合标准的做法。 第三,提前感谢您的帮助=) 好的 我收到一个如下的文本文件: 4 6010000011010011010101100 前两位是行数和列数 我应该把它读入一个动态分配的2d数组,这样我就可以操作数组中的特定数字 我已经将4和6存储到变量中,没有问题,还创建了数组并正确分配了空间。我似乎不知道如何将所有0和1放入数组中。我到处找了好一阵子都没找到 我也不允许在我的程序中

首先,我不是要求别人帮我做家庭作业,只是为了帮助我完成一个我卡住的部分。 第二,我不是C语言专家,所以请原谅任何不符合标准的做法。 第三,提前感谢您的帮助=)

好的

我收到一个如下的文本文件:

4 6
010000
011010
011010
101100

前两位是行数和列数

我应该把它读入一个动态分配的2d数组,这样我就可以操作数组中的特定数字

我已经将4和6存储到变量中,没有问题,还创建了数组并正确分配了空间。我似乎不知道如何将所有0和1放入数组中。我到处找了好一阵子都没找到

我也不允许在我的程序中的任何地方使用
[]
,我们关注的是指针,所以必须使用指针。然而,如果我能用
[]
符号得到一个有效的解决方案,我可以稍后尝试并制作所有的指针,但现在我无法找到任何一种方法来正确工作

下面是我正在编写的函数,它接收已打开的文件:

 void image(FILE *fp){
     int row =0, col=0, i=0, j=0;
     int **image;

     fscanf(fp, "%d %d", &row, &col); 

     image = (int**) malloc(row*sizeof(int*));

     for (i = 0; i < row; i++){
          *(image+i) = (int*) malloc(col*sizeof(int));

          for(j=0; j< col; j++){
              //TRIED THIS BUT IT DOESNT WORK
               fscanf(fp, "%d", &image[i][j]);                
          }
          printf("%d\n", **(image+i));
     }
 }
void图像(文件*fp){
int行=0,列=0,i=0,j=0;
int**图像;
fscanf(fp、%d%d、&行和列);
image=(int**)malloc(row*sizeof(int*);
对于(i=0;i
这是我在其他几种方法中尝试过的一种方法。正如我所说,我愿意找到一种方法,首先使用
[]
,然后尝试将其转换为指针。我希望有人能给我一些建议,因为我有点迷路了。不管怎样,再次感谢您的帮助

~B.

试试:

  for(j = 0; j < col; j++) {
       if (!fscanf(fp, " %c", &image[i][j])) /* Also note the space */
           break;

       image[i][j] -= '0'; /* Or you can go `if (image[i][j] == '0')`.. */
  }
(j=0;j{ 如果(!fscanf(fp、%c、&image[i][j])/*也请注意空格*/ 打破 图像[i][j]-='0';/*或者您可以转到'if(图像[i][j]=='0')`*/ } 试试:

(j=0;j{ 如果(!fscanf(fp、%c、&image[i][j])/*也请注意空格*/ 打破 图像[i][j]-='0';/*或者您可以转到'if(图像[i][j]=='0')`*/ }
您确定阵列没有正确读入吗?打印错误(仅打印第一个值)。最后还有一个零散的
}
,但我认为您没有从周围的函数定义中删除它。忽略关于悬挂大括号的注释,您只是忘记缩进我现在看到的主体。cnicutar(下图)是正确的;之所以会发生这种情况,是因为您读取的数字之间没有空格,所以您读取的是整数10000,而不是您想要的一个数字。您确定数组没有正确读取吗?打印错误(仅打印第一个值)。最后还有一个零散的
}
,但我认为您没有从周围的函数定义中删除它。忽略关于悬挂大括号的注释,您只是忘记缩进我现在看到的主体。cnicutar(下图)是正确的;这是因为你读的数字之间没有空格,所以你读的是整数10000,而不是你想要的一个数字;image[i][j]='0'@Akron我同意,有时候
getc
很棒。我喜欢这个,但我更喜欢fgetc(fp):image[i][j]=fgetc(fp);image[i][j]='0'@Akron我同意,有时候
getc
太棒了。