C++为什么在试图读取表单文件并将其分离为不同的变量时会出现这种情况



所以inputs.txt文件看起来像这个

john connor
neil young
cat stevens

看到这个问题后,我试着像这个一样阅读

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
int main() {
ifstream inputFile("inputs.txt");
string s1, s2;
string line;
stringstream sline;
while ( getline(inputFile, line) ) {
sline.str(line);
sline >> s1 >> s2;
cout << "Just read: " << s1 << " " << s2 << endl;
}
inputFile.close();
return 0;
}

但是我得到的输出是

Just read: john connor
Just read: john connor
Just read: john connor

为什么会发生这种情况?我做错了什么?任何帮助都将不胜感激!

编辑:在使用rafix07的注释修复了我的问题后,我注意到如果我在inputs.txt文件中添加几行空行,我得到的输出是

john connor
neil young
cat stevens

我得到的输出是

Just read: john connor
Just read: neil young
Just read: neil young
Just read: cat stevens
Just read: cat stevens
Just read: cat stevens

(这不是想要的行为(

如注释中所述,放入

sline.clear();  

在while循环中,这将重置I/O状态。因为在该sline >> s1 >> s2;之后,eof位被设置为true。

看到这个:

while ( getline(inputFile, line) )
{
sline.clear();
sline.str(line);
sline >> s1 >> s2;
cout << "Just read: " << s1 << " " << s2 << endl;
}

你也可以简单的代码如下:

#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>
int main() 
{
std::ifstream inputFile("inputs.txt");
if(inputFile.is_open()==0)
{
std::cout<<"File Error";
exit(1);
}
std::string line;
while ( getline(inputFile, line) )
std::cout << "Just read: " <<line << std::endl;
inputFile.close();
return 0;
}

编辑:

如果你想要分开的两个字符串,试试这个

std::string s1,s2;
while ( inputFile>>s1>>s2 )
std::cout << "Just read: " <<s1<<" "<<s2 << std::endl; 

相关内容

最新更新