用于计算单词数

时间:2015-07-28 13:53:33

标签: c++ file count

编写一个函数定义,用于计算文本源中一行中的单词数。

我尝试了两种不同的代码并获得了两种不同的结果

 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()函数的工作情况以及这两个循环的区别吗?

3 个答案:

答案 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的类型。