Как выйти из цикла do-while, когда пользовательский ввод равен «q» в C ++ - PullRequest
0 голосов
/ 30 января 2019

Я хочу выйти из цикла, если пользователь нажимает «q», но когда я нажимаю q, он входит в бесконечный цикл.Что не так с моим утверждением if?Почему он не распознает, когда пользователь нажимает «q»?

#include<iostream>
using namespace std;

int main()
{
string user_input;
double price;
do
{
    cin >> price;
    int multiple = price * 100;
    if (user_input == "q")
    {
        break;
    }
    else if (multiple % 5 == 0)
    {
        cout << "This is a multiple of 0.05" << endl;
        return 1;
    }
    else
    {
        cout << "No multiple" << endl;
    }
} while (1 || user_input != "q");
system("pause");
} 

1 Ответ

0 голосов
/ 31 января 2019

Идея такова: прочитайте char (не число);посмотрите, равно ли оно q.Если да, выходите.Если нет, то putback the char и затем прочитайте число.

#include<iostream>
using namespace std;

int main()
{
    char user_input; // note: changed it from string to char
    double price;
    while (true) // infinite loop; exit conditions are inside the loop
    {
        cin >> ws >> user_input; // note: it's important to discard whitespace

        if (user_input == 'q') // note: changed from " to '
            break;

        // Note: for putback to succeed, it must be only 1 byte, cannot be a string
        cin.putback(user_input);

        if (!(cin >> price))
            break; // note: exit on error

        // Your code here
        ...

    }
}

Эта идея не будет работать, если вы хотите, чтобы пользователь набрал exit или что-то более длинное, чем 1 байт.Если вам нужна такая длинная команда выхода, вы должны использовать традиционный механизм синтаксического анализа (прочитать строку ввода; сравнить ее с командой exit; если не равно, , преобразуйте строку в число ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...