所以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;