c ++改变cin也许是skipline?
Posted
技术标签:
【中文标题】c ++改变cin也许是skipline?【英文标题】:c++ change cin maybe skipline? 【发布时间】:2012-08-13 23:02:31 【问题描述】:我在大学时从 C++ 开始(在使用 Modula2 之前)。我对cin有问题。 在与用户交互时,我需要识别某些“命令”。,
例如“addClient Rafael”。我按以下方式处理 cin >> command, strcoll (command, "addClient"), 然后如果 command 等于 addClient, y do cin >> command2 (所以我读了拉斐尔),。并执行适当的程序...
而且,我必须识别删除所有数据库的“deleteAll”,所以我不必读取第二个参数。
当有人输入诸如“skjdsjfnsdj”之类的随机内容时,它应该说“错误命令”,如果命令不等于我的“已知”命令中的任何一个,它就会打印“错误命令”。
问题是,当某些类型“skajskajs jakasjkajs”说“错误的命令。磨损的命令”......它应该只说一次......
所以,“noskip”我的东西是没有用的,也许如果我能打破字符串..,也许更简单的方法,帮助任何人?
【问题讨论】:
请出示您的代码。听起来您应该使用 std::getline,但很难确定。 【参考方案1】:最灵活、最直观的方法如下:
bool done = false;
while( !done )
string commandLine, cmd, value;
getline( cin, commandLine );
istringstream ss(commandLine);
ss >> cmd >> value;
if( cmd == "deleteAll" )
// BOOM
else if( cmd == "addClient" )
// Do something with 'value'. You could wait until here to read it
// if you want, instead of always attempting to read it.
else if( cmd == "quit" )
done = true;
else
cout << "Wrong command\n";
或编辑以适合您的目的。我使用这种方法来解析简单的键/值对配置文件。工作是一种享受,几乎不费力去写代码。
【讨论】:
【参考方案2】:您可以直接尝试istream::getline()。
这将防止每个命令的消息出现多次(由 \n 分隔)。
【讨论】:
我总是首先建议std::getline
(来自istream::getline
。以上是关于c ++改变cin也许是skipline?的主要内容,如果未能解决你的问题,请参考以下文章