有一个包含两列数字的文本文件,例如:
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
这是输出的一部分。实际输出非常大。为什么我的阅读杂乱无章?
答案 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);
}
}