C ++更改CIN可能会跳过

c++ change cin maybe skipline?

本文关键字:更改 CIN      更新时间:2023-10-16

我在大学里从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() 代替。

这将防止消息针对每个命令多次出现(用 分隔)。