统计字数的函数定义

Function definition to count number of words

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

我尝试了两种不同的代码,得到了两种不同的结果

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

你的答案的第二个版本总是会额外循环一次。

想一想:如果 file >> B 失败会怎样?你仍然会增加 count.

另外,不要在 eof() 上循环,因为您通常会循环太多次。 (Why is iostream::eof inside a loop condition considered wrong?)

相反,执行以下操作:

while(file >> B)
{
   std::cout << B << std::endl;
   ++count;
}

因为你的文件流有一个到 bool 的隐式转换来检查它的状态,如果不是 good,则 returns 为 false。

问题不是 EOF,而是要查看它的工作情况 阅读 this

关于您的代码,请注意第一个代码中的 file>>B;。由于file>>B;最后一次执行第二个代码失败,你得到的正确答案少了一个。

输出比实际字数多1的原因:第2版第一次看之前输出了B。这是对未初始化变量的使用,可能导致输出看起来像垃圾或空行的内容。不可靠的代码。

此外,我建议使用 std::string 而不是 char[80] 作为变量 B 的类型。