文件结尾和输入流的状态C++; 我目前尝试从C++中只使用一行读取文本文件的输入;我能够使用std::getline(file,string)成功地将文件中的一行文本提取为字符串。提取行后,不再有文本。当我尝试检查流的状态时,当调用file.good()并且到达已知的文件“end”时,它将永远不会返回false。为什么会这样?见下面的代码: #include<fstream> #include<cstring> using namespace std; ifstream file; string test; file.open("HW6.txt");//HW6.text is one line text file getline(file,test);//extracts the line of text; file should be blank now cout<<file.good(); //this returns true getline(file,test); //attempt to extract text from blank file cout<<file.good(); //this returns true still #包括 #包括 使用名称空间std; ifstream文件; 串试验; 打开(“HW6.txt”)//HW6.text是一行文本文件 getline(文件、测试)//提取文本行;文件现在应该为空 cout

文件结尾和输入流的状态C++; 我目前尝试从C++中只使用一行读取文本文件的输入;我能够使用std::getline(file,string)成功地将文件中的一行文本提取为字符串。提取行后,不再有文本。当我尝试检查流的状态时,当调用file.good()并且到达已知的文件“end”时,它将永远不会返回false。为什么会这样?见下面的代码: #include<fstream> #include<cstring> using namespace std; ifstream file; string test; file.open("HW6.txt");//HW6.text is one line text file getline(file,test);//extracts the line of text; file should be blank now cout<<file.good(); //this returns true getline(file,test); //attempt to extract text from blank file cout<<file.good(); //this returns true still #包括 #包括 使用名称空间std; ifstream文件; 串试验; 打开(“HW6.txt”)//HW6.text是一行文本文件 getline(文件、测试)//提取文本行;文件现在应该为空 cout,c++,fstream,ifstream,C++,Fstream,Ifstream,关于何时istream::good()返回true和false的列表形式,有一个非常好的总结 istream::good()仅当以下标志均为true时返回true: eofbit failbit badbit 在您的情况下,流仍然处于良好状态,因为您在成功读取该行之后没有尝试读取任何其他内容。下面是一个来自的示例 #包括 #包括 #包括 使用名称空间std; int main(int argc,字符**argv) { 弦线; iff流(argv[1]); 如果(f.是开着的()){ whil

关于何时
istream::good()
返回
true
false
的列表形式,有一个非常好的总结

istream::good()
仅当以下标志均为true时返回true:

eofbit
failbit
badbit 

在您的情况下,流仍然处于良好状态,因为您在成功读取该行之后没有尝试读取任何其他内容。

下面是一个来自的示例

#包括
#包括
#包括
使用名称空间std;
int main(int argc,字符**argv)
{
弦线;
iff流(argv[1]);
如果(f.是开着的()){
while(getline(f,line)){
//if(line.size())

无法在初次调用后再调用getline和调用good()仍然返回true。很抱歉,我在原始帖子中忘记了提到这一点。在更新中,您说的是“空行”。就
std::getline()而言,这仍然是有效的一行
。因此,如果我要构造一个while循环来提取多行,那么一旦读取了文件中的所有行,哪个条件语句将终止读取。本质上,已经到达文件的结尾?我希望在有文本时循环。一旦没有更多文本,我希望循环完成。您可以终止
>while
使用无限多个条件循环。当第一个字符为
q
时终止。当行只有空格时终止。当行不包含数字时终止。依此类推while(getline,f,line)在我的例子中,循环是无止境的。你知道为什么会这样吗?一定是你的代码输入错误。
getline
试图读取文件时返回false。
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(int argc, char **argv)
{
  string line;
  ifstream f(argv[1]);
  if (f.is_open()) {
    while ( getline (f,line) ) {
      // if (line.size())
      cout << line << endl;
    }
    f.close();
  } else cerr << "Unable to open file " << argv[1] << endl;

  return 0;
}