编写一个函数定义,用于计算文本源中一行中的单词数。
我尝试了两种不同的代码并获得了两种不同的结果
countwords()
{
ifstream file("notes.txt");
int count=0;
char B[80];
file>>B;
While (!file.eof())
{
cout<<B<<endl;
file>>B;
count++;
}
}
这给出了理想的答案。
相反:
countwords()
{
ifstream file("notes.txt");
char B[80];
int count=0;
While (!file.eof())
{
file>>B;
cout<<B<<endl;
count++;
}
}
但是这给出了一个比实际单词数多1的答案。
有人可以解释一下eof()
函数的工作情况以及这两个循环的区别吗?
答案 0 :(得分:5)
你答案的第二个版本总会循环一次。
想一想:如果count
失败会发生什么?您仍然会增加eof()
。
另外,请勿在{{1}}上循环,因为您通常会循环太多次。 (Why is iostream::eof inside a loop condition considered wrong?)
相反,请执行以下操作:
while(file >> B)
{
std::cout << B << std::endl;
++count;
}
因为您的文件流隐式转换为bool
来检查其状态,如果它不是good
则返回false。
答案 1 :(得分:0)
问题不在于EOF,而是看其工作阅读this。
在谈论您的代码时,请在第一段代码中注明file>>B;
。由于file>>B;
在上次执行第二个代码时失败,因此您得到的答案不正确。
答案 2 :(得分:0)
输出比实际字数多1的原因:在第二个版本中,您在第一次读取之前输出B.这是未初始化变量的用法,可能导致输出看起来像垃圾或空行的内容。不可靠的代码。
另外我建议使用std :: string而不是char [80]作为变量B的类型。