存储Char和Int的文件

存储Char和Int的文件,c,C,我不知道为什么我不能弄明白,但我正在尝试读取一个类似这样的文件 000xx 11xx0 0x1x0 11110 我试图读取该文件,然后搜索“x”值并将其替换为“2”,然后将其存储在数组中以供以后使用。输出应该是这样的 00022 11220 02120 11110 我不确定我是否做到了这一点,我想我必须将文件存储到一个数组中,然后进行搜索和替换。这是我的代码,用于读取文件并尝试打印,我尝试使用int数组和char数组,我不知道为什么我不能解决这个问题,任何帮助都将不胜感激 int main(

我不知道为什么我不能弄明白,但我正在尝试读取一个类似这样的文件

000xx
11xx0
0x1x0
11110
我试图读取该文件,然后搜索“x”值并将其替换为“2”,然后将其存储在数组中以供以后使用。输出应该是这样的

00022
11220
02120
11110
我不确定我是否做到了这一点,我想我必须将文件存储到一个数组中,然后进行搜索和替换。这是我的代码,用于读取文件并尝试打印,我尝试使用int数组和char数组,我不知道为什么我不能解决这个问题,任何帮助都将不胜感激

int main()
{

FILE *fvec;
fvec =fopen("numbers.vec" , "r");
if(!fvec){printf("error reading file");}  
int col, row;
  int array[10][10];

  for (col = 0; col < 10; ++col){
    for (row = 0; row <10; ++row){
     fscanf(fvec, "%d", &array[col][row]);}
    }


  for (col = 0; col < 10; ++col){
    for (row = 0; row <10; ++row){
      printf("%d", array[col][row]);}
      printf("\n");
    }
}

您将要读取一个包含ASCII字符(数字和x)的文件,因此,您应该在读取时将读取的字符转换为数字。其次,正如您所说的,您需要将字符“x”转换为数字2,这很简单。此外,还可以改进循环的终止条件,即仅读取文件中的行数或文件中的最大行数(行)。鉴于上述情况,您可能需要执行以下操作

  memset(array, 0, sizeof(array));             // do this so that everything is set to 0
  while ((fgets(buf, 20, fvec) != 0) && ( row < 10)) {
     printf("%s", buf);
     for (int col = 0; col < strlen(buf); col++) {
          if (buf[col] == 'x') {
             array[row][col] = 2;              // turn this to digit 2
          } else if (isdigit(buf[col])) {
             array[row][col] = buf[col]  - '0';// turn this to a digit
          }
     }
     row++;
  }
memset(数组,0,sizeof(数组));//执行此操作,使所有内容都设置为0
而((fgets(buf,20,fvec)!=0)和&(row<10)){
printf(“%s”,buf);
for(int col=0;col

您也可以逐个字符读取(fscanf和%c等),但为了给您一个示例,您首先应该检查
fscanf的返回值,因为它可能会失败。您正在分配一个
10x10
数组,而您的文件可能包含较少的字节。我建议你一个字符一个字符地读取你的文件,并保存在多维字符数组中。当你到达一个
\n
时,开始填充下一行。
%d“
表示整数
x
不是整数,对吗?始终检查
fscanf
的返回值。内部循环会穿过,列也会穿过,外部循环会向下推进,行也会穿过。所以我应该使用if语句返回int吗?然后使用另一个if语句作为返回字符?我只是将所有内容作为字符读取。
  memset(array, 0, sizeof(array));             // do this so that everything is set to 0
  while ((fgets(buf, 20, fvec) != 0) && ( row < 10)) {
     printf("%s", buf);
     for (int col = 0; col < strlen(buf); col++) {
          if (buf[col] == 'x') {
             array[row][col] = 2;              // turn this to digit 2
          } else if (isdigit(buf[col])) {
             array[row][col] = buf[col]  - '0';// turn this to a digit
          }
     }
     row++;
  }