c++ - 如何在 C++ 中实现分号结束输入?
问题描述
如何实现一个命令行界面,命令必须以分号结尾。然后回车执行。否则,按回车换行。如果我描述的不是很清楚,你可以参考mysql命令行。
如何在 C++ 中实现上述内容?例如:
如果用户输入foo;bar
然后str = "foo"
. 它之间可以有一些空格;
。
在 C++ IO 中,我只知道:
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
cin >> str;
}
我不知道如何实现其他输入功能。
解决方案
最简单的方法是使用std::getline
(如评论中的建议),但使用自定义分隔符(';'
在您的情况下),如下所示:
string command;
while (getline(cin, command, ';')) {
// process the command there
}
但是,这种方法有几个缺点并且非常有限:
- 它读取直到任何
';'
被击中。如果您要处理足够复杂的命令以支持字符串文字,那么您将需要更复杂的解析来处理这个:echo "Hello; sample text"; exit;
,作为两个命令,但不是三个; - 当您按 Enter 时,
getline
将等待更多输入,直到看到分号,但它不会插入任何“用户友好”提示,例如>
让用户知道他们需要提供更多输入或他们忘记了最后的分号命令的。
如果您可以在不支持这些功能的情况下使用,getline
那就很好了。否则,您需要自己解析输入行。
推荐阅读
- data-warehouse - 无法在 FK 约束中找到列名
- sql - SQL中的第N个薪水
- python - 将 python 2.5 移植到 3.X 时,如何替换“来自
进口 *”? - rust - Rust OR between two options
- c# - 如何从安装在 WinForms 应用程序的树莓派中的 mySQL 数据库远程获取数据?
- c# - how to debug system typeloadexception old VS
- c# - 在整个 JObject 中搜索嵌套属性
- c# - C#/Visual Studio trying to change the content of random array and getting 'Object reference not set to an instance of an object.' error
- php - 如何解决课堂作业端点上的错误请求?
- javascript - IndexDB 记录占用的空间比显示的要多