如何在C++循环中从文件读取多行数据并保存到变量?
在C++中实现类似Java Scanner.nextInt()的顺序读取多行数据功能
嘿,我来帮你捋清楚这个问题!你想用C++实现像Java里Scanner.nextInt()那样按顺序读取文件里的多行数据到变量,你的代码思路方向是对的,但有几个小问题需要修正,我来一步步给你说明。
首先先指出你现有代码里的问题:
- 你用
getline(myFile, line)读了第一行后,后续循环里一直用atoi(line.c_str())获取a、b、c,这会导致这三个变量永远是第一行的数值,因为你没再读取后续的行。 double count[cases];属于变长数组,C++标准并不支持这种写法(某些编译器可能作为扩展支持,但不推荐),建议用std::vector<double>来替代。- 你的读取逻辑没对应上“按顺序读取多行数据”的需求,其实C++的文件流本身就支持像
Scanner那样直接读取整数,不用先读整行再转换。
方法一:直接用文件流读取整数(最接近Java Scanner的写法)
C++的std::ifstream的>>运算符会自动跳过所有空白字符(包括换行、空格、制表符),所以不管数据是一行一个还是一行多个,都能按顺序读取,和Scanner.nextInt()的行为几乎一致。
修正后的代码示例:
#include <iostream> #include <fstream> #include <vector> // 用vector替代变长数组 using namespace std; int main() { int cases; int a, b, c; ifstream myFile("input.in"); if (myFile.is_open()) { // 先读取测试用例数 myFile >> cases; cout << "cases : " << cases << "\n"; // 用vector存储结果,替代变长数组 vector<double> count(cases); // 循环读取每组a、b、c for (int i = 0; i < cases; ++i) { // 直接从文件流读取三个整数,自动跳过换行/空格 myFile >> a >> b >> c; cout << a << " " << b << " " << c << "\n"; // 这里可以把处理后的值存入vector // count[i] = 你的计算结果; } myFile.close(); // 记得关闭文件 } else { cout << "无法打开文件!" << endl; } return 0; }
方法二:按行读取并解析(适合每行固定格式的场景)
如果你的文件里每行是一组数据(比如每行三个整数),可以用getline读取整行,再用istringstream把行内容拆分成整数,这种方式更灵活,能处理复杂的行内格式。
示例代码:
#include <iostream> #include <fstream> #include <vector> #include <sstream> // 用于istringstream using namespace std; int main() { int cases; int a, b, c; string line; ifstream myFile("input.in"); if (myFile.is_open()) { // 先读取第一行的cases数 getline(myFile, line); cases = stoi(line); // 用stoi替代atoi,更符合C++风格 cout << "cases : " << cases << "\n"; vector<double> count(cases); for (int i = 0; i < cases; ++i) { // 读取当前行 getline(myFile, line); // 把行内容转换成输入流 istringstream iss(line); // 从流中读取三个整数 iss >> a >> b >> c; cout << a << " " << b << " " << c << "\n"; } myFile.close(); } else { cout << "无法打开文件!" << endl; } return 0; }
额外说明
- 推荐用
stoi替代atoi,因为stoi是C++标准库函数,支持更多类型转换,还能抛出异常处理错误。 - 记得用完文件流后调用
close(),或者让ifstream对象在作用域结束时自动销毁(它的析构函数会自动关闭文件)。
内容的提问来源于stack exchange,提问作者bamsarts
相关产品推荐
相关产品推荐

