C ++更改CIN可能会跳过
c++ change cin maybe skipline?
我在大学里从C++开始(在使用 Modula2 之前)。我有 cin 问题。在与用户交互时,我需要识别某些"命令"。
例如"addClient Rafael"。我按以下方式处理它 cin>> command, strcoll (command, "addClient"),然后,如果命令等于addClient,则cin>> command2(所以我读了拉斐尔)。并做正确的程序...
而且,我必须识别"deleteAll",它会删除我的所有数据库,所以我不必读取第二个参数。
当有人输入诸如"skjdsjfnsdj"之类的随机内容时,它会说"错误的命令",如果命令不等于我的"已知"命令,则不会打印"错误的命令"。
问题是,当某些类型"skajskajs jakasjkajs"时,它说"错误的命令。磨损命令"...它应该只说一次...
所以,"noskip"我的事情是没有用的,也许如果我能打破字符串..,也许更简单的方法,帮助任何人?
最灵活、最直观的方法如下:
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 commandn";
}
}
或根据您的目的进行编辑。 我使用这种方法来解析简单的键/值对配置文件。 工作是一种享受,几乎不需要花费任何精力来编码。
你可以简单地尝试 istream::getline() 代替。
这将防止消息针对每个命令多次出现(用 分隔)。
相关文章:
- 如何在Qt C++中更改光标
- 为什么++(*p)更改指针值
- 如何通过派生类函数更改基类中的向量
- C++中的cin.ignore()函数不适用于整个流
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- TDateTime格式在C++Builder中不会更改
- 查找后更改类变量
- 为什么我无法更改"set<set>"循环中的值<int>
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- Xaudio2在更改缓冲区或循环时弹出声音
- Problems with std::cin.fail()
- 如何在Qbutton的帮助下更改Q对话框的宽度
- 在更改for循环的第三部分后,未使用for循环结果
- 如何更改CIN的语言环境
- 将大写字母(从 cin 读取)更改为小写
- std::cin 错误状态和变量更改
- C ++更改CIN可能会跳过
- 使用 CIN 更改二维字符串数组值
- 如何防止"cin"在每次输入后更改输出屏幕中的行
- 更改cin的分隔符(c++)