Используя значение с плавающей запятой для сравнения? - PullRequest
0 голосов
/ 24 августа 2018

Скажем, я ввожу числа в число с плавающей точкой и хочу выйти из цикла при вводе 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 голосов
/ 24 августа 2018

Если вы уверены, что вам нужно беспокоиться только об одном символе, вы можете просто использовать peek(), чтобы взглянуть на следующий символ, фактически не потребляя его:

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

Если это более сложно, тогда вам сначала нужно прочитать строку, а затем проанализировать ее.

Не забывайте, что чтение поплавка уже включает его разбор, поэтому основным отличием является промежуточная копия в строку, что не должно быть слишком плохо, так как вы, вероятно, не копируете много символов. Кроме того, если вы будете повторно использовать один и тот же экземпляр строки каждый раз, его буфер будет также использоваться повторно.

О, вы также можете использовать небольшую удобную функцию std::stof, чтобы разобрать строку в число с плавающей точкой.

0 голосов
/ 24 августа 2018

Я думаю, вы можете сделать это так:

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