【问题标题】:C++ convert a string in a loop to a doubleC ++将循环中的字符串转换为双精度
【发布时间】:2018-02-13 15:52:56
【问题描述】:

我试图在循环中将数字转换为字符串,但立即将它们转换为双精度数,以便可以添加 3 个数字并用于获得平均值。这是我的代码:

string name;
double num = 0, many = 0, total = 0, value = 0;

inputFile.open("Rainfall.txt");


for (int count = 1; count <= 6; count++)
{
    inputFile >> name;

    if (count == 1 || count == 3 || count == 5)
    {

        continue;

    }

    num = stod(name);

    num += total;


}

cout << total << endl;

虽然这给了我一个简单的 0 行输出,但我现在需要将字符串转换为双精度。输入文件如下所示:

1 月 1.2 日 2.3 3 月 2.4 日

8 月 2.3 日 9 月 2.4 日

【问题讨论】:

  • total 开始时为 0,您永远不会修改它。您想将您的 num 变量添加到总计中。尝试总计 += 数量。此外,您应该在调试器中单步执行您的代码以查看发生了什么。
  • 好吧@AnonMail 谢谢我一直不敢相信我唯一的错误是我做 num += total 而不是你说的。谢谢你,我一定已经尝试了一切,但那。谢谢。
  • 你也可以在每次循环中读入一个字符串和一个双精度值,然后简单地忽略字符串的值,而不是将一个字符串读入一个双精度值,然后计算何时需要@987654322 @.
  • @StephenDocy 你能给我提供那个代码吗?我这样做是因为我想不通

标签: c++ type-conversion double


【解决方案1】:

假设您的输入文件结构保持不变(不清理输入)并且std::stod 将在无法转换为双精度的输入上严重失败,这是一个稍微好一点的方法。您可以简单地将给定月份和每月降雨总量同时读取到相应的变量类型中。如果你把整个东西放在一个while循环中,它会一直读取你的输入,直到它到达文件末尾或流出现错误。

#include <iostream>
#include <fstream>

int main()
{
    double total(0.0);
    std::ifstream inputFile("Rainfall.txt");
    if (inputFile.is_open())
    {
        std::string month;
        double rain(0.0);
        while(inputFile >> month >> rain)
        {
            total += rain;
        }
        inputFile.close();  ///< technically not necessary
    }

    std::cout << "total rainfall " << total << std::endl;

    return 0;
}

【讨论】:

  • inputFile.close() 是不必要的,您可以反转您的is_open 检查以提前返回,从而节省一定程度的缩进。
  • @Simple 我知道 fstream 是一个合适的 RAII 对象,但我个人认为关闭流并刷新输入缓冲区是一种很好的做法。我的编码标准鼓励单点回报,但你的观点很好。
猜你喜欢
  • 2013-10-10
  • 2015-04-10
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 2012-07-09
  • 2022-01-20
  • 1970-01-01
相关资源
最近更新 更多