2

入力を正しい値で検証するプログラムを作成していますが、残念ながら何か間違っています。このプログラムは、答えが 1 か 0 の場合、入力値を 10 回チェックする必要があります。そうでない場合は、もう一度答えを求める必要があります。入力が完了すると、printf によって正しい答えが表示されるはずですが、表示されません。

私の推測では、「スイッチケース」の部分に何か問題があると思います。助けていただければ幸いです!

私のコード:

int main()

{
char a0, a1, a2, a3, a4, a5, a6, a7, a8, a9;
char c = '0';
int a = 0, OK = 0, check = 0, valid_input = 0, a_ok;

printf("Fill in a value 1 or 0.\n\n");

while (a < 10)
{
while (valid_input == 0)
{
    printf("Fill in a%d: ", a);
    a_ok = scanf("%d", &OK);
    if (a_ok != 1)
    {
        scanf("%s", &c);
    }
    else if (OK <0 | OK >1)
    {
        do
        {
            while (check == 0)
            {
            printf("Fill in a%d: ", a);
            check = check +1;
            }
        c = getchar();
        }
        while (!isdigit(c));
        ungetc(c, stdin);
    }
    else
    valid_input = 1;
}
switch (a)
    {
    case 0:
    OK = a0;
    case 1:
    OK = a1;
    case 2:
    OK = a2;
    case 3:
    OK = a3;
    case 4:
    OK = a4;
    case 5:
    OK = a5;
    case 6:
    OK = a6;
    case 7:
    OK = a7;
    case 8:
    OK = a8;
    case 9:
    OK = a9;
    }
a = a +1;
}

/*
printf("Fill in a1: ");      **<--- WANT TO REMOVE THIS PART BY LOOP**
scanf("%d", &a1);
printf("\nFill in a2: ");
scanf("%d", &a2);
printf("\nFill in a3: ");
scanf("%d", &a3);
printf("Fill in a4: ");
scanf("%d", &a4);
printf("\nFill in a5: ");
scanf("%d", &a5);
printf("Fill in a6: ");
scanf("%d", &a6);
printf("\nFill in a7: ");
scanf("%d", &a7);
printf("\nFill in a8: ");
scanf("%d", &a8);
printf("Fill in a9: ");
scanf("%d", &a9);
*/

printf("\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d", a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);

getch();
return(0);
}
4

1 に答える 1

7

breakスイッチの各ケースでステートメントを忘れました:

case 0:
    OK = a0;
    break;
case 1:
    OK = a1;
    break;
/* etc. */

また、次のifステートメントは間違っています。

if (OK <0 | OK >1)

おそらく、ビットごとの OR 演算||子ではなく|、論理 OR 演算子を使用するつもりでした。

さらに、aN 変数 ( a0a1、 ... a9) はどこにも初期化されていません。初期値は未定義です。

さらに(ここで継続語が不足しています:-P)、これ:

while (!isdigit(c));

間違っているように見えます。これは次と同等です:

while (!isdigit(c))
{
}

つまり、無限ループ whenで、 whenisdigit(c) == 0は何もしませんisdigit(c) != 0。代わりにこれを書くつもりだったのかもしれません:

while (!isdigit(c)) {
    ungetc(c, stdin);
}

stdinしかし、それでも、同じキャラクターを無限ループに押し戻すことになります。

これも間違っています:

scanf("%s", &c);

cchar変数ですが、scanf() に文字列を読み取るように指示しています。

エラーではありませんが、10 個の個々の変数の代わりに、代わりに配列を使用する必要があります。

char val[10];

そのため、代わりに:

a0 a1 ... a9

あなたが持っているでしょう:

val[0] val[1] ... val[9]

とにかく、このプログラムは非常に壊れています。C を学び始めたばかりなら、ゼロから始めてもっと注意を払うことをお勧めします。

于 2012-11-22T13:07:51.083 に答える