1

以下は私のコードです:

char name;
bool isValid = true;
int mode;

cout << "Enter name:" << endl;
cin >> name;

do
{
cout << "Choose a mode" << endl;
cin >> mode;

switch (mode)
{
case 1:
    iniCharacter (name, 110, 100, 100);
    break;
case 2:
    iniCharacter (name, 100, 110, 100);
    break;
case 3:
    iniCharacter (name, 100, 100, 110);
    break;
default:
    isValid = false;
    cout << "Invalid mode, ";
    break;
}
}while (!isValid);

しかし、上記のコードを実行すると、次のような出力が得られました。

[output]Please enter name:

[input] test

[output] Invalid mode

[output] Invalid mode

[output] Invalid mode

[output] Invalid mode

[output] Invalid mode


...

モードへの値の入力を開始していないのに、コードがループするのはなぜですか?

プログラムはユーザーが「モード」を入力するのを待つべきではありませんか?

4

5 に答える 5

1

isValid試行が失敗した後に有効な入力を入力した場合を考慮して、ループの先頭で trueに設定する必要がある場合があります。

isValid = true;
于 2013-03-29T14:11:04.247 に答える
1

「名前」のタイプを「文字列」に変更します

于 2013-03-29T14:11:16.993 に答える
0

とてもシンプル

名前宣言を次のように変更するだけです

char name[10]  // assuming your name would be 10 characters long.

プログラム全体が問題なく実行されます。

それが役に立てば幸い。

于 2013-03-29T14:20:22.827 に答える
0

バッファに残す\nTry while(cin.get()!='\n'); beforedoループ

于 2013-03-29T14:24:26.300 に答える
0

動作する以下のコードを使用してください-

char name[100] = {0};
bool isValid = true;
int mode;

cout << "Enter name:" << endl;
cin >> name;

do
{
cout << "Choose a mode" << endl;
cin >> mode;

switch (mode)
{
case 1:
    iniCharacter (name, 110, 100, 100);
    break;
case 2:
    iniCharacter (name, 100, 110, 100);
    break;
case 3:
    iniCharacter (name, 100, 100, 110);
    break;
default:
    isValid = false;
    cout << "Invalid mode, ";
    break;
}
}while (!isValid);

理由:

  • 名前を単一の文字として宣言し、ユーザーが複数の文字、つまり「test」を入力したため、最初の文字が名前に割り当てられ、残りはそのままバッファーに配置され、それらは整数ではないため、cin はあなたに尋ねることを気にしませんコンソールで。したがって、その int ie モードには初期のガベージ値のみが含まれます。

  • ただし、2 番目の出力、つまり「Choose a mode」も表示されましたが、コンソール バッファがそのエラーであふれたため、それも表示できませんでした。

于 2013-03-29T15:47:38.557 に答える