2

cinに問題があります。整数の代わりに文字を入力すると、cinが機能せず、その後は新しい値を入力することもできません。私は何をすべきか?私はすでにfflush(stdin)を試しました

struct PersonList
{
    Person person;
    PersonList* personListPtr;
};


void addPerson(PersonList*& ptr, int position);
void deletePersonList(PersonList* ptr);




int main()
{
    PersonList* personListPtr = NULL;

    int flag = 0;
    int pos = 0;
    int i;

    while(flag != 27)
    {
        system("cls");
        cout << "1 - add objects\n"
            << "2 - delete objects\n"
            << "ESC - exit\n";
        switch(flag)
        {
        case '1':
            cout << "Enter position: ";
            **cin >> pos;**
            addPerson(personListPtr, pos);
            break;
        case '2':
            break;
        case '3':
            break;
        }
        flag = _getch();
    }


    deletePersonList(personListPtr);

    return 0;
}

ありがとう。

4

1 に答える 1

0

いくつかのイディオムを混ぜているようです。何が何をするのかわかりません が、とにかく;_getch()と互換性があるとは想像できません。たとえば、フラグ文字を読みます。同じソースからの異なるストリームを単純に混在させることはできません。std::cinstd::cin

あなたが説明している特定の問題に関しては、読んでいるものに変換できないものを入力すると、ストリームはエラー状態になり(値を使用する前に確認する必要があります)、それに対するすべての操作はノーになります-エラーをクリアするまで操作します ( std::istream::clear())。しかし、それは他の問題を解決するつもりはありません。のようなものを使用することを主張する場合は_getch()、すべての入力にそれを使用し、位置の入力用の文字列を作成し、 を使用std::istringstreamして変換する必要があります。関数が実際に行うことによっては、バックスペース、エンター、さらにはエコーなどを処理する必要がある場合もあります。

于 2012-12-10T20:13:00.967 に答える