You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:45:38