0

私は大学で C++ から始めています (以前は Modula2 を使用していました)。私はcinに問題があります。ユーザーと対話している間、特定の「コマンド」を認識する必要があります。

たとえば、「addClient ラファエル」。私はそれを次のように処理します cin >> command, strcoll (command, "addClient"), そして、command が addClient に等しい場合、y do cin >> command2 (だから私は Rafael を読みました),. ちゃんとした手続きをして…

また、すべてのデータベースを削除する「deleteAll」を認識する必要があるため、2 番目のパラメーターを読み取る必要はありません。

誰かが「skjdsjfnsdj」などのランダムなものを入力すると、「間違ったコマンド」と言うことが想定されます。コマンドが「既知の」コマンドのどれとも一致しなかった場合、「間違ったコマンド」と出力されます。

問題は、一部のタイプの「skajskajs jakasjkajs」が「wrong command. wearg command」と表示されることです...一度だけ言う必要があります...

だから、「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 に答える