使用字母的浮点值进行比较?

时间:2018-08-24 15:35:11

标签: c++ loops floating-point char

说我正在将数字输入浮点数,并想在输入q时退出循环。我以为可以检查输入“ q”时分配的值,然后在循环中进行比较,但浮点数似乎不太精确,因此可以正常工作:

int main() {

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

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

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如果您确定只需要担心一个字符,则可以使用peek()来查看下一个字符,而无需实际消耗它:

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

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

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

哦,同样,您可以使用方便的小功能std::stof将字符串解析为浮点数。

答案 1 :(得分:0)

我认为您可以这样做:

    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);
}