进行字符个数统计,代码如下:
#include <fstream>
#include<string>
int frequency[150];
int main()
{
ifstream myfile("D:\\c++\\data(1).txt");
if (!myfile.is_open()) cout << "failed!" << endl;
if (myfile.is_open())
{
char c;
while (!myfile.eof())
{
myfile >> c;
//防止读取最后一个字符两次
if (myfile.fail()) break;
frequency[(int)c]++;
}
for (int i = 39; i < 123; i++)
{
if (frequency[i] != 0)
{
cout << (char)i << "的个数为:" << frequency[i] << endl;
}
}
}
myfile.close();
}
-
问题:一开始统计结果中位于文件最后一位的字符个数总是多了一个,查了下ifstream的读取,结合其他人的分享资料, 得知原因如下:
-
原因:问题出在eof()
当文件指针到达文件末尾时,eof不会立刻返回true,要等到下一次读取时才会返回。
此时,ifstream流的状态标识为失败,没有读到东西,所以c保存了上一次读取的数据,因此出现最后一个字符被显示两次的现象。