从文件中读取双精度值: std::stod 调用后的 std::invalid_argument

问题描述 投票:0回答:1
#include <iostream> 
#include <fstream>
#include <sstream>


int main() {

    std::ifstream file("data.txt");
    std::string   line, numStr;

    // read first line
    std::getline(file, line);
    
    // read first value of first line
    std::istringstream lineStream(line);
    std::getline(lineStream, numStr, '\t');

    std::cout << "numStr= " << numStr << std::endl; // prints "numStr = "0.0014
    double num = std::stod(numStr); // <-- this failes
}

enter image description here

文件

data.txt
仅包含一行两个值(见上图),用制表符分隔。

当我使用 g++ 运行上述程序时,我得到输出

numStr= 0.0014
terminate called after throwing an instance of 'std::invalid_argument'
  what():  stod
Aborted (core dumped)

如您所见,字符串打印正确,但无论出于何种原因,

numStr.length() = 9
,这是错误的,因为字符串只有六个字符。

知道这里出了什么问题吗?

c++ fstream sstream
1个回答
-1
投票

1.修剪空白 - 确保 numStr 不包含任何前导空格 2. 处理错误 - 添加异常处理以捕获无效字符串

© www.soinside.com 2019 - 2024. All rights reserved.