存储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++;
}