Почему пользователь не может внести свой вклад - PullRequest
2 голосов
/ 05 августа 2020

Это мой код.

#include <iostream>
#include <string>
using namespace std;

int main() {

    cout << "Welcome to Starbucks! What would you like to order?" << endl;
    cout
            << "Before you select your order, would you like to look at your wallet to see how much money you have on you right now? "
            << flush;

    string input;
    cin >> input;

    if (input == "Yes" || input == "yes") {
        cout << " " << endl;
        cout << "OK. You have $18.90 in your wallet. Now showing menu. "
                << flush;
    }
    else {
        cout << " " << endl;
        cout << "OK. Now showing menu. " << endl;
    }

    cout << "\n\n\tDrinks:\n\nHot Coffees\nHot Teas\nHot Drinks\nFrappuccino Blended Beverages\nCold Coffees\n\n\tFood:\n\nHot Breakfast"
            "\nBakery\nLunch\nSnacks & Sweets\nYogurt & Custard\n\n\tMerchandise:\n\nDrinkware" << endl;

    string option;

    cout << "Select an option from one of these sections. Type your selection here: " << flush;
    getline(cin, option);

    if (option == "Hot Coffees" || option == "hot coffees" || option == "Hot coffees" || option == "hot Coffees") {

        cout << "Welcome to the Hot Coffees section. Here is a list of all the hot coffees we sell:\n\nAmericanos:\n\nCaffè Americano\nStarkbucks Blonde Caffè Americano\n" << endl;
    }



    return 0;
}

В самом конце, когда я решаю использовать функцию getline (я хочу получить ввод пользователя для использования в операторах if), я не могу для ввода в мою консоль по неизвестной причине, поэтому я не могу получить ввод пользователя. Я уже пробовал cin.ignore (); , и хотя это позволило мне ввести в консоль, после того, как я набрал слова «Горячий кофе», он не распечатал «Добро пожаловать в раздел горячего кофе», хотя я запрограммировал свой оператор if, чтобы распечатать это if ( option == «Горячий кофе»). Если вы можете в этом разобраться, спасибо! Если вы не можете, я, конечно, рад, что вы хотя бы попробовали, и буду столь же благодарен.

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Вероятно, что у вас все еще есть \ n в вашем буфере ввода, поэтому, когда вы достигнете getline (), он прочитает его как ограничивающий символ и вернет его как ввод для вас. Я думаю, что std :: flu sh может делать что-то другое, чем вы думаете. Это полезное чтение: https://www.cplusplus.com/reference/ostream/flush-free/

Вот строка кода, которая полезна при работе с пользовательским вводом на консоли на C ++. Она получает каждый символ во входном буфере, пока он не находит \ n.

while (cin.get() != '\n');

Удачи вам!

1 голос
/ 05 августа 2020

Это потому, что C ++ не считает пробелы, поэтому попробуйте набрать cin.ignore(); после функции getline. И вы допустили ошибки в разделе if, введите это ....

if (option == "Hot Coffees" || "hot coffees" || "Hot coffees" || "hot Coffees") {

    cout << "Welcome to the Hot Coffees section. Here is a list of all the hot coffees we sell:\n\nAmericanos:\n\nCaffè Americano\nStarkbucks Blonde Caffè Americano\n" << endl;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...