C ++:字符串中的空格阻止我比较cin输入。

时间:2013-06-03 22:04:40

标签: c++ string getline spaces cin

(对不起,我知道之前已经问过这个问题[和回答],但没有一个解决方案对我有用,因为关于我的代码设置方式的某些内容是不可思议的,我不知道是哪个部分)

好的,我有一个函数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;
}

2 个答案:

答案 0 :(得分:1)

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

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

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

答案 1 :(得分: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);
    }

实际上,做{}虽然更合适。