C++ 为什么getline没有生成我期望的文本?
可能重复:C++ 为什么getline没有生成我期望的文本?,c++,getline,C++,Getline,可能重复: 在下面的代码中,我的getline被完全跳过,不会提示输入 #include <cstdlib> #include <iostream> #include <iomanip> #include <string> #include <istream> using namespace std; int main () { int UserTicket[8]; int WinningNums[8];
在下面的代码中,我的getline被完全跳过,不会提示输入
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <string>
#include <istream>
using namespace std;
int main ()
{
int UserTicket[8];
int WinningNums[8];
char options;
string userName;
cout << "LITTLETON CITY LOTTO MODEL: " << endl;
cout << "---------------------------" << endl;
cout << "1) Play Lotto " << endl;
cout << "q) Quit Program " << endl;
cout << "Please make a selection: " << endl;
cin >> options;
switch (options)
{
case 'q':
return 0;
break;
case '1':
{
cout << "Please enter your name please: " << endl;
getline(cin, userName);
cout << userName;
}
cin.get();
return 0;
}
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
int UserTicket[8];
int WinningNums[8];
字符选项;
字符串用户名;
cout问题在于:
cin >> options;
当用户点击enter键时,您只能从cin
中提取(>
)。因此,用户键入1 enter并执行该行。由于options
是char
,因此它提取单个字符(1
)从cin
并将其存储在options
中。Enter仍然在stdin缓冲区中,因为还没有任何东西使用它。当您到达getline
调用时,它在缓冲区中看到的第一件事是Enter,它标志着输入的结束,因此getline
立即返回一个空字符串
有很多方法可以修复它;与您在程序中使用的模型相匹配的最简单方法可能是告诉cin
忽略其缓冲区中的下一个字符:
cin >> options;
cin.ignore();
它是如何工作的?在什么条件下?运行时错误?编译器错误?你想做什么?你能把它具体化为一个较小的例子吗?让人们开始思考的好方法…还有,这是家庭作业吗?如果是这样的话,它应该被标记为这样。就像它完全跳过getline语句一样。这将成为一个常见问题。我认为这是t这是我最近几天第四次看到这个问题了。谢谢,我忘了把cin.ignore();+1放在酷按钮上。我以前从来没见过这个。