#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
}
文件
data.txt
仅包含一行两个值(见上图),用制表符分隔。
当我使用 g++ 运行上述程序时,我得到输出
numStr= 0.0014
terminate called after throwing an instance of 'std::invalid_argument'
what(): stod
Aborted (core dumped)
如您所见,字符串打印正确,但无论出于何种原因,
numStr.length() = 9
,这是错误的,因为字符串只有六个字符。
知道这里出了什么问题吗?
1.修剪空白 - 确保 numStr 不包含任何前导空格 2. 处理错误 - 添加异常处理以捕获无效字符串