gpt4 book ai didi

c++ - 计算器的读/写文件 : atof error

转载 作者:行者123 更新时间:2023-11-28 06:53:10 24 4
gpt4 key购买 nike

我目前有一个如下的文本文件:

12 6 4 9 

这是一个非常简单的文本文件,因为我只想让一行工作,然后可能会扩展到多行。另外:这是我正在研究的 RPN 计算器。

我想一个字符一个字符地浏览这个文本文件。我目前实现它的方式是使用一个简单的 while 循环:

string line;
while (!infile.eof()){
getline(infile, line);

if (isdigit(line[0])){
rpn_stack.push_back(atof(line.c_str()));
}
}

rpn_stack 是一个 vector ,因为我不会在 C++ 中使用内置的堆栈库。我目前遇到的问题是输出只是输出“12”。这是为什么?

有没有一种方法可以逐字符遍历文件而不是逐行读取?它是否因为找到空白区域而中断(这会被视为 EOF)吗?


编辑:

代码重写如下:

string line;

while (!infile.eof()){
getline(infile, line);

for (int i = 0; i < line.size(); i++){
if (isdigit(line[i])){
rpn_stack.push_back(atof(line.c_str()));
}
}
}

输出是12 5次不同的,显然是错误的。 txt 文档中不仅有 4 项,而且只有一项是 12。有人可以提供一些见解吗?

最佳答案

这将从 infile 中读取尽可能多的 double(即,直到文件末尾或遇到不是 的标记double), 以空格分隔。

for (double d; infile >> d;)
rpn_stack.push_back(d);

如果您需要逐行解析,正如@ooga 所说,您将需要一个看起来像这样的两阶段阅读器:

for (std::string line; getline(infile, line);) {

std::istringstream stream{line};

for (double d; stream >> d;)
rpn_stack.push_back(d);
}

额外提示:不要使用 .eof()

关于c++ - 计算器的读/写文件 : atof error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23508038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com