从文本文件中读取问题

时间:2016-02-16 11:39:06

标签: c++

有一个包含两列数字的文本文件,例如:

4014 4017
4014 4021
4014 4023
4014 4030
4014 4037
4014 4038
4016 4025
4017 4021
4017 4026
4017 4030
4018 4023
4018 4030

和使用此代码读取文件的C ++程序here

#include <iostream>
#include <fstream>
#include <list>
using namespace std;

int main() {
list<int> v_list, u_list, v_unique_sorted_list;
ifstream infile("text.txt");

int v, u;

while (infile >> v >> u)
{
    v_list.insert(v_list.end(), v);
    u_list.insert(u_list.end(), u);

    cout << v << " " << u << endl;
}

我正在使用CLion,运行控制台上的输出是:

3880 3908
38803982 3994
3982 399

3824 3902
38243873 3943
3873 3948

3986 4033
3987 40124016 4025
4017 4021

这是输出的一部分。实际输出非常大。为什么我的阅读杂乱无章?

1 个答案:

答案 0 :(得分:0)

你的问题是输入文件的所有行都有换行符(当然除了最后一行)。

出于这个原因,我倾向于使用std::getline而不是直接提取数据。这应该适合你:

#include <iostream>
#include <sstream>
#include <list>
#include <string>
#include <fstream>

int main() {
    std::list<int> v_list, u_list, v_unique_sorted_list;

    std::ifstream fin("text.txt");
    std::string line;

    // while we can get data from the input file
    while(std::getline(fin, line)) {
        // put the line in a stream
        std::stringstream ss(line); 
        int v, u;

        // extract two ints from the stream
        ss >> v >> u;

        std::cout << v << " " << u << std::endl;

        v_list.insert(v_list.end(), v);
        u_list.insert(u_list.end(), u);
    }
}