c++从txt文件读取字符串输出时乱码

#include <fstream>
#include <fstream>
#include <iostream>
using namespace std;

void main()
{
int i,j;
float Acount[63],Bcount[63],Ccount[63],Dcount[63],Ecount[63],Fcount[63],vA[63],vB[63],vC[63],vD[63],vE[63],vF[63];
char a[505];
char b[8][63];
ifstream fin("D:/我的输入文件.doc");
for(i=0;i<504;i++)
fin>>a[i];
for(i=0;i<504;i++)
cout<<a[i];
for(i=0;i<8;i++)
{
for(j=0;j<63;j++)
{
b[i][j]=a[j+i*63];
}

}
for(i=0;i<8;i++)
for(j=0;j<63;j++)
{
if(b[i][j]='A') Acount[j]=Acount[j]+1.0;
if(b[i][j]='B') Bcount[j]=Bcount[j]+1.0;
if(b[i][j]='C') Ccount[j]=Ccount[j]+1.0;
if(b[i][j]='D') Dcount[j]=Dcount[j]+1.0;
if(b[i][j]='E') Ecount[j]=Ecount[j]+1.0;
if(b[i][j]='F') Fcount[j]=Fcount[j]+1.0;
}
ofstream fout("D:/我的输出文件.doc");
for(j=0;j<63;j++)
{
vA[j]=Acount[j]/32.0;
vB[j]=Bcount[j]/32.0;
vC[j]=Ccount[j]/32.0;
vD[j]=Dcount[j]/32.0;
vE[j]=Ecount[j]/32.0;
vF[j]=Fcount[j]/32.0;
fout<<"在第"<<j+1<<"道题中, "<<"其中A占比例为:"<<vA[j]*100<<"%"<<" ; "<<"其中B占比例为:"<<vB[j]*100<<"%"<<" ; "<<"其中C占比例为:"<<vC[j]*100<<"%"<<" ; "<<"其中D占比例为:"<<vD[j]*100<<"%"<<" ; "<<"其中E占比例为:"<<vE[j]*100<<"%"<<" ; "<<"其中F占比例为:"<<vF[j]*100<<"%"<<endl;
}
fout.close();
cin.get();
}

首先,你做文件的输入输出的时候不该用.doc的,word不是纯文本。另外,ifstream fin("D:/我的输入文件.doc");
for(i=0;i<504;i++)
fin>>a[i];
for(i=0;i<504;i++)
cout<<a[i];
这一部分是从word里读东西,然后输出,可是word的刚开始时一堆格式信息,你是识别不了的,所以会出现乱码。
两个建议,
1、改成.txt纯文本文件做文件读写。
2、读东西的时候别固定读多少字,读到文件尾了就要结束。不然你还是会读到乱码!
祝学习进步
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-28
你在写入文件之前加个输出代码,把字符串输出,看看字符串里有东西没追问

出现是一样的错误,我觉得应该是没有结束符的缘故,但是不知道怎么加这个结束符,毕竟是读取数据。

追答

比如最后一个元素是 a[k] ,就这样: a[k+1]='\0'

追问

还是这样啊,求解释啊。要不你在你的电脑上试试,数据是ABCDEFABDCDFAFDAFDE.....总共是503个

追答

哎呀,字符串就是一个字符数组加上结尾标志,这个标志就是字符:'\0'
它的acsii编码是 0

第2个回答  2013-04-29
读的时候应该读到EOF结束吧
相似回答