0

(抱歉,我知道这个问题之前已经被问过[并回答了],但是没有一个解决方案对我有用,因为关于我的代码设置方式的一些东西很不稳定,我不知道那是哪一部分)。

好的,我有一个函数,get_cookie_type,它允许用户从 3 种类型的 cookie 中进行选择——巧克力片、糖和花生酱。在他们输入输入后,我确保他们输入的内容是这 3 个选项之一,如果不是,则抛出错误消息。问题是对于“巧克力片”和“花生酱”的选择,我总是收到“输入错误”的信息,显然是因为它们有空格,我不知道如何解决这个问题。我试过弄乱cin.getline,但它仍然给我错误的输入信息。

为什么是这样

  string get_cookie_type()
    {
    std::string cookieType;
    cout << "What kind of cookie is the customer asking for? (Enter 'Chocolate chip', 'Sugar', or 'Peanut butter', exactly, without quotes).\n";
    std::getline(std::cin, cookieType);
    while (cookieType !="Chocolate chip" &&  cookieType != "Sugar" && cookieType != "Peanut butter")
    {
        cout << "\nYou put your data in wrong, try again.\n";
        cin >> cookieType;
    }
  return cookieType;
}
4

2 回答 2

1

您应该放置 std::getline(std::cin, cookieType); 里面一会儿。尝试:

    std::getline(std::cin, cookieType);
    while (cookieType !="Chocolate chip" &&  cookieType != "Sugar" && cookieType != "Peanut butter")
    {
        cout << "\nYou put your data in wrong, try again.\n";
        std::getline(std::cin, cookieType);
    }

实际上,do{}while 会更合适。{}

于 2013-06-03T22:15:04.220 回答
1

std::getline(std::cin, cookieType)在while循环中使用。operator>>将在第一个空格处停止,而std::getline默认情况下在换行符处停止。

看起来您在输入流中留下了字符。在第一次调用之前添加以下行std::getline(并包含<limits>标题):

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
于 2013-06-03T22:08:47.457 回答