(对不起,我知道之前已经问过这个问题[和回答],但没有一个解决方案对我有用,因为关于我的代码设置方式的某些内容是不可思议的,我不知道是哪个部分)
好的,我有一个函数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;
}
答案 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);
}
实际上,做{}虽然更合适。