【问题标题】:C++: Getline stops reading at first whitespaceC++:Getline 在第一个空格处停止读取
【发布时间】:2017-01-19 09:48:42
【问题描述】:

基本上我的问题是我试图从一个充满数字和 cmets 的 .txt 文件中读取数据,并将每一行存储到一个字符串向量中,但是我的 getline 函数在第一个空白字符处停止读取,所以注释like (* comment *) 被分解成

str[0] = "(*";
str[1] = "comment";
str[2] = "*)";

这就是我的 getline 函数代码块的样子:

int main() {
string line;
string fileName;
cout << "Enter the name of the file to be read: ";
cin >> fileName;

ifstream inFile{fileName};

istream_iterator<string> infile_begin {inFile};
istream_iterator<string> eof{};
vector<string> data {infile_begin, eof};
while (getline(inFile, line))
{
    data.push_back(line);
}

这就是 .txt 文件的样子:

101481
10974
1013
(* comment *) 0
28292
35040
35372
0000
7155
7284
96110
26175

我不明白为什么它没有读完整行。

【问题讨论】:

    标签: c++ string vector getline


    【解决方案1】:

    这是因为您的代码没有使用std::getline 来读取输入文件。

    如果您非常仔细地查看您的代码,您会发现,在您到达那一点之前,您的代码在文件上构造了一个istream_iterator&lt;string&gt;,并将其传递给@,并将结尾的istream_iterator&lt;string&gt; 值传递给@ 987654324@ 的构造函数,这有效地将整个文件(一次一个以空格分隔的单词)吞入向量中。

    当事情接近getline 循环时,整个文件已经被读取,并且循环完全没有做任何事情。你的getline 并没有真正做任何事情,就目前的情况而言。

    完全摆脱与istream_iterators 相关的那些东西,让getline 完成它的预期工作。

    【讨论】:

    • 哇。非常感谢,难怪我被甩了——这是我的教练告诉我们使用的例子,同时也告诉我们使用 getline。对 C++ 相当陌生,所以我永远不会明白这一点,哈哈。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    相关资源
    最近更新 更多