求问个关于文件读取的有关问题
求问个关于文件读取的问题
用如下代码来读取并输出类似如下的字点阵文件,可为什么每次读出的都不是想要的文字
#include <stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *fp;
int i,len,j=0;
char c;
unsigned char BM[100];
char str[200],a[4];
printf("请输入一个中文:");
scanf("%s",BM);
for(len=0;BM[len]!='\0';len++);
for(i=0;i<len;i++)
{
printf("BM[%d]=%x\n",i,BM[i]);
}
for(i=0;i<len;i++)
{
sprintf(str+2*i,"%x",BM[i]); /输出文字编码/
}
for(i=0;i<2*len;i++)
{
printf("%c\t",str[i]); /将文字编码存入数组/
}
printf("\n");
if((fp=fopen("d:\\LiShu56.txt","r"))==NULL)
{
printf("cannot open!");
exit(0);
}
i=1;
while(!feof(fp)) /通过编码搜索文字并输出/
{
c=fgetc(fp);
if(c==str[j])
{
j++;
i++;
if(i==4)
{
while(1)
{
c=fgetc(fp);
printf("%c",c);
if(c=='C')
exit(0);
}
}
}
}
return 0;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CurCode: baea /汉字编码/
width = 7
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,_XXXXX__,________,________,________,
________,________,________,XXXXXXX_,________,________,________,
________,________,________,XXXXXXX_,________,________,________,
________,_XX_____,________,XXXXXXXX,________,______XX,X_______,
________,XXXXXXXX,XXXXXXXX,XXXXXXXX,XXXXXXX_,__XXXXXX,XX______,
________,XXXXXXXX,XXXXXXXX,XXXXXXXX,XXXXXXXX,XXXXXXXX,XXX_____,
________,XXXXXXXX,XXXXXXXX,XXXXXXXX,XXXXXXXX,XXXXXXXX,XXX_____,
_______X,XXXXX___,________,_X______,________,____XXXX,XXX_____,
_______X,XXXX____,_______X,XXX_____,________,______XX,XXX_____,
_______X,XXX_____,_______X,XXXX____,________,______XX,XXX_____,
_______X,XXX_____,_______X,XXXX____,________,_______X,XX______,
_______X,XXX_____,______XX,XXXX____,________,_______X,XX______,
_______X,XXX____X,XXXXXXXX,XXXXXXXX,XXXXXXXX,X______X,XX______,
_______X,XXX___XX,XXXXXXXX,XXXXXXXX,XXXXXXXX,XX_____X,XX______,
________,XXX___XX,XXXXXXXX,XXXXXX__,XXXXXXXX,XX_____X,XX______,
________,XXX___XX,X_____XX,XXX_____,________,_______X,XX______,
________,XX______,_____XXX,XX______,________,_______X,XX______,
________,_X______,____XXXX,XX____XX,X_______,_______X,X_______,
________,________,____XXXX,X_____XX,XX______,________,________,
________,________,___XXXXX,_____XXX,XX______,________,________,
________,________,_XXXXXX_,____XXXX,X_______,________,________,
________,________,XXXXXX__,___XXXXX,_____X__,________,________,
________,______XX,XXXXX___,__XXXXX_,___XXXXX,________,________,
________,___XXXXX,XXXX____,_XXXXX__,___XXXXX,X_______,________,
_______X,XXXXXXXX,XXX_____,XXXXX___,___XXXXX,XX______,________,
_XXXXXXX,XXXXXXXX,XX_____X,XXXX____,____XXXX,XXX_____,________,
__XXXXXX,XXXXXXXX,_____XXX,XXX_____,_____XXX,XXXX____,________,
___XXXXX,XXXXXXX_,____XXXX,XXX_____,______XX,XXXXX___,________,
____XXXX,XXXXX___,___XXXXX,XXXXX___,_____XXX,XXXXXX__,________,
______XX,X_______,___XXXXX,XXXXXX__,___XXXX_,__XXXXX_,________,
________,________,____XXX_,_XXXXXXX,XXXXXX__,____XXXX,________,
________,________,________,___XXXXX,XXXXX___,_____XX_,________,
________,________,________,____XXXX,XXXX____,________,________,
________,________,________,______XX,XX______,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
------解决思路----------------------
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
要么你汉字的前后两个字节的顺序反了
要么你从0开始还是从1开始混了
要么你GBK编码还是Unicode编码亦或UTF8编码没弄清:对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
……
------解决思路----------------------
楼上的说的都很好
用如下代码来读取并输出类似如下的字点阵文件,可为什么每次读出的都不是想要的文字
#include <stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *fp;
int i,len,j=0;
char c;
unsigned char BM[100];
char str[200],a[4];
printf("请输入一个中文:");
scanf("%s",BM);
for(len=0;BM[len]!='\0';len++);
for(i=0;i<len;i++)
{
printf("BM[%d]=%x\n",i,BM[i]);
}
for(i=0;i<len;i++)
{
sprintf(str+2*i,"%x",BM[i]); /输出文字编码/
}
for(i=0;i<2*len;i++)
{
printf("%c\t",str[i]); /将文字编码存入数组/
}
printf("\n");
if((fp=fopen("d:\\LiShu56.txt","r"))==NULL)
{
printf("cannot open!");
exit(0);
}
i=1;
while(!feof(fp)) /通过编码搜索文字并输出/
{
c=fgetc(fp);
if(c==str[j])
{
j++;
i++;
if(i==4)
{
while(1)
{
c=fgetc(fp);
printf("%c",c);
if(c=='C')
exit(0);
}
}
}
}
return 0;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CurCode: baea /汉字编码/
width = 7
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,_XXXXX__,________,________,________,
________,________,________,XXXXXXX_,________,________,________,
________,________,________,XXXXXXX_,________,________,________,
________,_XX_____,________,XXXXXXXX,________,______XX,X_______,
________,XXXXXXXX,XXXXXXXX,XXXXXXXX,XXXXXXX_,__XXXXXX,XX______,
________,XXXXXXXX,XXXXXXXX,XXXXXXXX,XXXXXXXX,XXXXXXXX,XXX_____,
________,XXXXXXXX,XXXXXXXX,XXXXXXXX,XXXXXXXX,XXXXXXXX,XXX_____,
_______X,XXXXX___,________,_X______,________,____XXXX,XXX_____,
_______X,XXXX____,_______X,XXX_____,________,______XX,XXX_____,
_______X,XXX_____,_______X,XXXX____,________,______XX,XXX_____,
_______X,XXX_____,_______X,XXXX____,________,_______X,XX______,
_______X,XXX_____,______XX,XXXX____,________,_______X,XX______,
_______X,XXX____X,XXXXXXXX,XXXXXXXX,XXXXXXXX,X______X,XX______,
_______X,XXX___XX,XXXXXXXX,XXXXXXXX,XXXXXXXX,XX_____X,XX______,
________,XXX___XX,XXXXXXXX,XXXXXX__,XXXXXXXX,XX_____X,XX______,
________,XXX___XX,X_____XX,XXX_____,________,_______X,XX______,
________,XX______,_____XXX,XX______,________,_______X,XX______,
________,_X______,____XXXX,XX____XX,X_______,_______X,X_______,
________,________,____XXXX,X_____XX,XX______,________,________,
________,________,___XXXXX,_____XXX,XX______,________,________,
________,________,_XXXXXX_,____XXXX,X_______,________,________,
________,________,XXXXXX__,___XXXXX,_____X__,________,________,
________,______XX,XXXXX___,__XXXXX_,___XXXXX,________,________,
________,___XXXXX,XXXX____,_XXXXX__,___XXXXX,X_______,________,
_______X,XXXXXXXX,XXX_____,XXXXX___,___XXXXX,XX______,________,
_XXXXXXX,XXXXXXXX,XX_____X,XXXX____,____XXXX,XXX_____,________,
__XXXXXX,XXXXXXXX,_____XXX,XXX_____,_____XXX,XXXX____,________,
___XXXXX,XXXXXXX_,____XXXX,XXX_____,______XX,XXXXX___,________,
____XXXX,XXXXX___,___XXXXX,XXXXX___,_____XXX,XXXXXX__,________,
______XX,X_______,___XXXXX,XXXXXX__,___XXXX_,__XXXXX_,________,
________,________,____XXX_,_XXXXXXX,XXXXXX__,____XXXX,________,
________,________,________,___XXXXX,XXXXX___,_____XX_,________,
________,________,________,____XXXX,XXXX____,________,________,
________,________,________,______XX,XX______,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
________,________,________,________,________,________,________,
------解决思路----------------------
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
要么你汉字的前后两个字节的顺序反了
要么你从0开始还是从1开始混了
要么你GBK编码还是Unicode编码亦或UTF8编码没弄清:对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
……
------解决思路----------------------
楼上的说的都很好