所以有inputs.txt
文件看起来像这样
john connor
neil young
cat stevens
并且在看到this问题之后,我正试图像这样阅读它>>
#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
((不希望的行为)
因此,有一个看起来像这个约翰·康纳·尼尔·尼尔·史蒂文斯(john connor neil young cat stevens)的inputs.txt文件,在看到这个问题后,我试图像这样#read
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;