Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么getline没有生成我期望的文本?_C++_Getline - Fatal编程技术网

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放在酷按钮上。我以前从来没见过这个。