txt文件读取为什么会读出乱码????

migsu 2003-03-24 10:02:31
以下是读出函数:
void CGoods::Read(FILE *fp)
{
char info[20];
fscanf(fp,"%s",info);
Num=info;
fscanf(fp,"%s",info);
Name=info;
fscanf(fp,"%s",info);
Charge=atof(info);
fscanf(fp,"%s",info);
InNum=atoi(info);
fscanf(fp,"%s",info);
Stock=atoi(info);
fscanf(fp,"%s",info);
Date=info;
fscanf(fp,"%s",info);
ToDate=info;
}

以下是写函数:
void CGoods::Write(FILE *fp)
{
CString Temp;
Temp.Format("%s\t%s\t%.2f\t%d\t%d\t%s\t% s",Num,Name,Charge,InNum,Stock,Date,ToDate);
fprintf(fp,Temp+_T("\r\n"));
}

先向文件中写入数据,然后读出,看到写入的数据是正确的,可为什么读出的时候确实乱码呢?以前也用过读取,和上面的读函数差不多,这次怎么会遇到这样的情况呢????
...全文
560 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
migsu 2003-03-24
  • 打赏
  • 举报
回复
今天不解决我就不回去了
大家一起看看
追加200分
migsu 2003-03-24
  • 打赏
  • 举报
回复
还是没变化诶,~~~~~~~~~~~~~
疯掉了~~~~~~~~
怎么会有这种事情发生的~~~~~~~
dxj221 2003-03-24
  • 打赏
  • 举报
回复
没有初始化buffer
memset(info,0,sizeof(info));
migsu 2003-03-24
  • 打赏
  • 举报
回复
用vc怎么以二进制格式打开txt
YP2002CN 2003-03-24
  • 打赏
  • 举报
回复
你可以用vc以二進制格式打開你的txt.看看他們的每一個字節是不是兩位
或者最前面的兩個字節是否是FFFE
migsu 2003-03-24
  • 打赏
  • 举报
回复
怎么看txt文件是不是unicode或其他非ansi的txt呢?
migsu 2003-03-24
  • 打赏
  • 举报
回复
以下是我利用读函数的函数:
我把读函数和写函数用一个商品类来实现,goods[i]是这个商品类的对象,大家看看这个函数有没有问题
void CSell::OnData()
{
FILE *fp;
int i=0;
fp=fopen("Goods.txt","r");
if(fp==NULL)
{
MessageBox("数据文件不存在,请检查数据文件是否在程序根目录下,如果不存在,请登陆系统进入管理系统创建商品信息数据库!","数据初始化错误",MB_ICONSTOP);
}
else
{
fseek(fp,0,SEEK_SET);
int line=0;
CStdioFile f=fp;
CString strBuf;
while(f.ReadString(strBuf))
{
line++;//获得文件中数据的行数
}

for(i=0;i<line;i++)
{
item[i].news.Empty();
goods[i].Read(fp);
item[i].news.Format("%s\t%s\t%.2f",goods[i].Num,goods[i].Name,goods[i].Charge);
item[i].pay=goods[i].Charge;
m_List.AddString(item[i].news);
}
}
fclose(fp);
}
YP2002CN 2003-03-24
  • 打赏
  • 举报
回复
你看你的txt是不是unicode或其他非ansi的txt
migsu 2003-03-24
  • 打赏
  • 举报
回复
我的写和读是不在同一个对话框中的,但我也在读之前fseek(fp, 0, SEEK_SET);了,可还是出现乱码
ping_2001 2003-03-24
  • 打赏
  • 举报
回复
Write(fp);
fseek(fp, 0, SEEK_SET);
Read(fp);
migsu 2003-03-24
  • 打赏
  • 举报
回复
??????????????????
能不能把你的代码贴上来看看啊
我看看你的fseek是放在什么地方的
ping_2001 2003-03-24
  • 打赏
  • 举报
回复
我用你的代码试过,fseek后是能够读到正确的东西的
migsu 2003-03-24
  • 打赏
  • 举报
回复
直接读也不行啊,前面的全是空的,只有一个0.00
migsu 2003-03-24
  • 打赏
  • 举报
回复
用strcpy编译不通过,fseek也已经复位了,可复位后,变化是这次的乱码和上次的不一样了
dgongxian 2003-03-24
  • 打赏
  • 举报
回复
读数据的时候 直接可以读啊,没有必要转换,来回转换, 当然会导致乱码 fscanf(fp,"%s",info);
Charge=atof(info);
改成fscanf(fp,"%f",Charge);就行了.

ping_2001 2003-03-24
  • 打赏
  • 举报
回复
兄弟,你在WRITE 之后没有把文件指针复位到起始位置,请加上
fseek(fp, 0, SEEK_SET);
loopyifly 2003-03-24
  • 打赏
  • 举报
回复
void CGoods::Read(FILE *fp)
{
char info[20];
memset(info, 0, 20);
fscanf(fp,"%s",info);
strcpy(Num,info);
.......
}
migsu 2003-03-24
  • 打赏
  • 举报
回复
CString里面没有strcpy这个函数啊,而且,数据是直接读取到info中的,就算把info改成CString类型还是不行
migsu 2003-03-24
  • 打赏
  • 举报
回复
全部是乱码,读取的那个%.2f也没有数值,是0.00,而且我在那文件中也没有放汉字,全是英文和数字
hanwg 2003-03-24
  • 打赏
  • 举报
回复
字符串的赋值用strcpy,不要用=
加载更多回复(10)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧