cin >> Input; {
if(Input == "a")
Position = "first";
else if(Input == "b")
Position = "second";
else if (Input == "c")
Position = "third";
else if(Input == "Stop")
break;
}
cin>>输入我还有两个cin部分。由于某种原因,它会跳过Name的getline。在我cin>>之后输入它显示名称:状态:然后执行状态的获取。
cout << "Name: ";
getline(cin, Name);
if(Name == "Stop")
break;
cout << "Status: ";
getline(cin, Status);
if(Status == "Stop")
break;
答案 0 :(得分:1)
我认为它应该是这样的:
cin.getline(whatever);
cin.ignore(1, '\n');
请参阅,当您从stdin读取一些文本时,字符串结束由\n
确定(默认情况下)。当您在控制台窗口中按Return键时,将跳过此符号,但它已存在。因此,当您尝试读取下一个字符串时,它会遇到之前忘记 \n
并终止读取返回空字符串。
阅读this了解详情。
答案 1 :(得分:1)
问题是大多数输入操作会在输入缓冲区中留下换行符(但不是getline()
),更多信息是here。
在你的情况下这一行:
cin >> Input; {
会留下/n
,后面会提到:
getline(cin, Name);
快速解决方案:
将cin >> Input;
替换为getline(cin, Input);
答案 2 :(得分:1)
cin >> somevar
留下了换行符。无论somevar
是什么类型,即使它是一个std :: string,该行语句的末尾也不会被该语句读取。因此,当您到达名称部分时,您会读到somevar
行的结尾,这显然是空的。在尝试读取名称之前扔掉一个getline,它应该没问题。