我正在开展一个简洁的游戏(这不是整个代码,只是我遇到了问题)并且我遇到了这个问题;填充条件后,它会回到开始状态,它会让我重新输入字符串,但是,无论我输入什么,我都会得到'无效' 。有谁知道为什么?我正在使用 GNU C ++编译器。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string command;
mainscreen:
cout << "blab";
getlinething:
cin.ignore();
getline(cin, command);
if (command == "task")
{
goto mainscreen;
}
else
{
cout << "Not valid.";
goto getlinething;
}
return 0;
}
答案 0 :(得分:1)
当我使用调试打印运行代码时,它显示每次读取新命令时都会丢失字符串的第一个字符。事实上,当我删除你的cin.ignore()它工作正常。 另外,看看,,看看它是否符合您的需求:
cout << "blab";
while(1){
getline(cin, command);
if(command == "task"){
cout << "blab";
getline(cin, command);
}
else{
cout << "Not valid.";
}
}
答案 1 :(得分:0)
至少为了调试目的,为什么不这样做
cout << "'" << command << "' Not valid" << endl ;
答案 2 :(得分:0)
好吧,我测试了一下。没有cin.ignore(),我根本无法将数据输入到字符串中。 我第一次进入它会抓住一切。因此,如果我写任务,字符串会说'task',但是第二次输入它时,它会说'ask'。我真的不知道为什么会这样做。
答案 3 :(得分:0)
默认情况下,cin.ignore()
行会丢弃一个字符(除非遇到EOF
,这对cin
)来说是一个相当慎重的行为。
因此,假设用户输入task
然后点击回车键。 cin.ignore()
将丢弃't'
,command
字符串将包含"ask"
。如果您想获得匹配,则第一次用户需要输入ttask
。在任何一种情况下,新行都将被丢弃。在遇到匹配之前会发生同样的情况。