C++中逐行读取成对数值并压入栈的实现问题
C++读取任意空白分隔的双精度数值对并压入栈
问题描述
输入文件格式示例:
0.1 239.402 0.4 32342.34 0.7 4.924939 ...
需使用C++ fstream读取文件,将每行的两个数值分别压入两个链表实现的Stack对象,循环需在文件末尾自动终止。现有代码错误假设分隔符为制表符,无法处理任意数量空白的情况。
解决方案
C++的>>提取运算符默认会自动跳过任意数量的空白符(空格、制表符、换行符等),无需额外处理分隔符,直接读取两个double值即可实现需求。
基础修正代码
#include <fstream> // 假设已实现链表结构的Stack类 class Stack { public: void push(double value) { // 链表push的具体实现逻辑 } }; int main() { std::ifstream inputFile("your_input_file.txt"); // 替换为实际文件名 double numA, numB; Stack stackA, stackB; // 只要成功读取一对双精度数值,就执行压栈操作 while (inputFile >> numA >> numB) { stackA.push(numA); stackB.push(numB); } return 0; }
关键说明
inputFile >> numA >> numB会自动跳过所有空白分隔符,包括行首空格、数值间的多空格/制表符,完美适配输入格式。- 当文件读取至末尾,或遇到无法解析为
double的内容时,>>运算符会标记流为失败状态,循环自动终止。 - 若需处理格式错误的行(如示例中的
0.4.),可添加错误处理逻辑跳过无效行:
while (true) { if (inputFile >> numA >> numB) { stackA.push(numA); stackB.push(numB); } else { if (inputFile.eof()) break; // 到达文件末尾,退出循环 // 清空流错误状态,跳过当前无效行 inputFile.clear(); std::string skipLine; std::getline(inputFile, skipLine); } }
内容的提问来源于stack exchange,提问作者Nathaniel
相关产品推荐
相关产品推荐

