1

こんにちは、この質問はちょっとばかげているように見えるかもしれませんが、私は理解できない根本的な問題に直面しています。これは 4 文字をスキャンするための非常に単純なコードですが、正しく機能しません。これはより大きなプログラムからの抜粋ですが、これが私が問題に直面しているところです。誰かがどこで大失敗を犯しているのか指摘できますか?

#include<stdio.h>
#include<stdlib.h>
{

    char a, b, c, d;
    printf("Enter the value of a\n");
    scanf("%c", &a);
    if(a == 'Y')
    {

        printf("Enter if this question is stupid or no Y/N\n");
        scanf("%c", &b);

    }
    else
    {

        printf("This is such a big waste of time");

    }

    printf("Enter the value of c\n");
    scanf("%c", &c);

    if(c == 'Y')
    {

        printf("Enter if I am stupid or no? Y/N\n");
        scanf("%c", &d);

    }
    else
    {

        printf("I will go mad soon\n");

    }

}
4

3 に答える 3

2

%c指定子は、1 文字のみを読み取るように指示しscanfます。文字を入力して Enter キーを押すと、2 つの文字が提供されます。したがって、次の呼び出しには、読み取る文字が既に含まれています。

この作業を適切に行うには、文字を読み取る前に空白をスキップする必要があります。各呼び出しを次のように変更します。

scanf(" %c", &a)

これで、以前に入力した改行はスキップされます。

于 2013-03-28T11:27:54.677 に答える
2

改行文字が原因で問題が発生する可能性があると思います。使ってみて

 scanf(" %c", &var)

:元の回答は間違っていましたが、受け入れられました.@teppicからこのソリューションをコピーしました。

于 2013-03-28T10:51:32.400 に答える
-1

文字をスキャンした後にバッファをフラッシュしていません。文字を入力して ENTER を押すと、次のスキャンで ENTER が文字として扱われるため、2 回目のスキャンがスキップされます。これらの __fpurge(stdin)、fpurge(stdin) のいずれかを、各スキャンの後に、システムで動作するものは何でも使用してください。それが動作します。

于 2013-03-28T11:11:13.667 に答える