0

我从大学的 C++ 开始(在使用 Modula2 之前)。我对cin有问题。在与用户交互时,我需要识别某些“命令”。,

例如“addClient Rafael”。我按以下方式处理它 cin >> command, strcoll (command, "addClient"),然后,如果 command 等于 addClient,则执行 cin >> command2(所以我读了 Rafael)。并执行适当的程序...

而且,我必须识别删除所有数据库的“deleteAll”,所以我不必读取第二个参数。

当有人输入诸如“skjdsjfnsdj”之类的随机内容时,它应该说“错误命令”,如果命令不等于我的“已知”命令中的任何一个,它都会打印“错误命令”。

问题是,当某些类型“skajskajs jakasjkajs”说“错误的命令。磨损的命令”......它应该只说一次......

所以,“noskip”我的东西没用,也许如果我能打破字符串..,也许是一种更简单的方法,可以帮助任何人吗?

4

2 回答 2

0

最灵活、最直观的方法如下:

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";
    }
}

或编辑以适合您的目的。我使用这种方法来解析简单的键/值对配置文件。工作一种享受,并且几乎不费力地编写代码。

于 2012-08-13T23:47:32.920 回答
-1

您可以简单地尝试istream::getline()代替。

它将防止每个命令的消息多次出现(由\n分隔)。

于 2012-08-13T23:13:19.503 回答