【问题标题】:Using a letter's float value to compare?使用字母的浮点值进行比较?
【发布时间】:2018-08-24 15:35:11
【问题描述】:

假设我正在向浮点数输入数字,并且想要在输入 q 时退出循环。我想我可以检查输入“q”时分配了什么值,然后在循环中比较 for,但浮点数似乎有点不精确,所以这不起作用:

int main() {

    float input;
    bool exit = true;
    do{
        cin >> input;
        if (input == -1.07974e+08) {
            exit=false;
            continue;
        }
        input = 0;
       } while (exit);

我能想到的唯一方法(例如,在输入数字时检查一个字母)是将每个输入保存为一个字符串,比较它,并在每次我需要工作时使用类似 atof() 的东西跟他们。但是,当字母应该是异常时,为每个输入运行解析器似乎效率很低。

有什么想法吗?

【问题讨论】:

  • 顺便说一句,有一个名为 exit 的变量,其值应该是 false 以退出循环。逻辑应该是相反的:true 意味着退出循环,测试变为while (!exit)

标签: c++ loops floating-point char


【解决方案1】:

如果您确定只有一个角色需要担心,您可以直接使用 peek() 来查看下一个角色,而无需实际使用它:

if(cin.peek() == 'q')
{
    exit=false;
    continue;
}

如果它比这更复杂,那么你必须先读取一个字符串,然后解析它。

不要忘记,读取浮点数已经涉及解析它,因此主要区别在于将中间副本复制到字符串中,这应该不会太糟糕,因为您可能不会复制很多字符。另外,如果你每次都重用同一个字符串实例,它的缓冲区也会被重用。

哦,你也可以使用方便的小函数std::stof 将字符串解析为浮点数。

【讨论】:

  • 嗯,每当我输入一个字符时它就会进入一个循环,每当存储字母时就会出错,但不确定是什么。这似乎是要走的路,所以谢谢!
【解决方案2】:

我认为你可以这样做:

    int main() {

        float input;
        char end = 'y';
        bool exit = true;
        do{
            cin >> input;
            cout << "Do you want to continue? y/n ";
            cin >> end;
            if (end == 'n') exit = false;
            input = 0;
           } while (exit);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    相关资源
    最近更新 更多