【发布时间】:2020-06-20 22:54:25
【问题描述】:
我正在从整数文件中读取,将文件中的每个元素转换为整数并将整数添加到向量向量中,如果文件移动到新行,则向量向量将移动到新向量.例如,如果输入文件包含:
9
2 5 8
7 1 10
5 3
20 15 30
100 12
向量的向量应该包含:
[ [9],
[2, 5, 8],
[7, 1, 10],
[5, 3],
[20, 15, 30],
[100, 12] ]
但是,我的实现的问题在于它存储:
[ [2, 5, 8],
[7, 1, 10],
[5, 3],
[20, 15, 30] ]
导致代码输出:
2 5 8
7 1 10
5 3
20 15 30
代码:
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
int main() {
ifstream inputFile("input.txt"); // Opens input file.
char currentChar;
int currentInput = 0;
vector<vector<int>> vec;
vector<int> vec2;
while (inputFile.get(currentChar)) { // Reads each character of given file.
if (currentChar == '\n') { // If current character is a new line, store current vec2 in vec and clear vec2
vec.push_back(vec2);
vec2.clear();
}
inputFile >> currentInput; // Current character to integer
vec2.push_back(currentInput); // Adds current integer to vec2
}
vec2.clear();
inputFile.close();
for (const auto& inner : vec) { // Prints vector of vectors.
for (auto value : inner) {
cout << value << " ";
}
cout << endl;
}
}
任何有关解决此问题的方法的建议都会有很大帮助。
【问题讨论】:
-
get()从文件中读取第一个字符。一旦读取了“9”,它就会被读取。它不见了。它不再在文件中。它不再是了。它渴望峡湾。它不再是文件中的字符。所以,后面的格式化提取操作符>>当然不会读取它。你不清楚这部分的哪一部分?这是一种根本错误的做法。您应该使用std::getline一次读取一行,再简单不过了,然后使用>>提取行中的每个 int 值,并用它来构造一个向量。这应该只有 4-5 行代码。
标签: c++ file-io fstream iostream