1

さて、これは私の最後の質問に似ていますが、私がやったことは、これほど単純なことにはあまりにも複雑すぎました。Enterキーを押す代わりに、スペースキーを押した後、コンソールから1つの文字または数字(これらのどれを受け取っているかがわかります)を取得する必要があります。'\n'の代わりにスペースの後に入力を端末に読み取らせる方法があるはずです。最初の入力が何であるかによって後続のデータ型が異なるコンソールから入力を読み取る必要があります。行全体を読み取り、文字列に解析してから、それらの一部をintに解析する必要はないと思います。

それで、これは実際にはC ++では不可能ですか、それともまだ見つけていませんか?

編集:

この問題を抱えている人のために、私は今、馬鹿のように感じているので、私の解決策を投稿しています。

#include <iostream>

using namespace std;

int main() {

    int command = 0, x = 0, y = 0, z = 0;
    char c;

    do {
        cin >> command;
        switch(command) {
            case 1:
                cin >> c >> x;
                cout << c << " " << x << endl;
                break;
            case 2:
                cin >> x >> y >> z;
                    cout << x << " " << y << " " << z << endl;
                    break;
        }
    } while (command); //Exits when command = 0;

    return 0;

}

switchステートメント内の次のcinは、最初のcinと同じバッファーから読み取るため、とにかくコマンドが何であるかを事前に読み取る必要はありません。ご覧のとおり、これは最初のcinの後のさまざまなタイプと量の入力に対して正常に機能するため、他のソリューションを使用する必要はありません。

同じ問題を抱えている可能性のある他の人のためにこれを投稿するだけで、cinの仕組みをよく理解していません。

4

1 に答える 1

2

getchar()ループ内で(または)への複数の呼び出しを発行getch()し、反復ごとに入力をチェックするだけです。

このようなもの (テストされていませんが、動作するはずです):

int loop = 1
int spacehit = 0
char last_c = 0;
while(loop)
{
    char c = getchar();
    switch(c)
    {
        case ' ':
            spacehit = 1;
            printf("hit '%c' before 'space'!\n", last_c);
            break;
        case 'x':
            printf("hit 'x' after 'space'!\n");
            spacehit = 0;
            break;
        case 27: // escape
            loop = 0;
            break;
        default:
            // do something, e.g. append the key in c to a string
            break;
    }
    last_c = c;
}

編集:探していた場合に備えて、スペースを押す前に文字を出力するコードを追加しました。

于 2011-02-28T23:22:42.507 に答える