C ++为什么在尝试读取表单文件并将其分成不同的变量时出现这种现象?

问题描述 投票:0回答:1

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

c++ string stringstream
1个回答
0
投票
如评论中所述
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.