1

さて、私は宿題のためにやるべき研究室があり、誰かがこれを手伝ってくれるかどうか疑問に思っていました. プログラムは、変数が壊れていると言い続けます。誰かが私を助けることができれば、それは素晴らしいことです. ところで、質問は気にしないでください笑。

int main (void)
{
char answer;

printf("welcome to the celebrity look alike game. You will be asked 5 yes or no questions. To answer please either put a y for yes or an n for no");
printf("\nQuestion 1: Do you have brown eyes?");
scanf("%1s", &answer);
if (answer=='y')
    {printf("\nQuestion 2:Do you have white hair?");
    scanf("%1s", &answer);
    if (answer=='y')
        printf("\nQuestion 3:Is your height around 5 feet 10 inches?");
        scanf("%1s", &answer);
        if (answer=='y')
            printf("\nQuestion 4:Are you a slim man?");
            scanf("%1s", &answer);
            if (answer=='y')
                printf("\nQuestion 5: Do you dress well?");
                scanf("%1s", &answer);
                if (answer=='y');
                    printf("You really look like Matt Leblanc!");}
else printf("Sorry, you do not look like this celebrity.");

return 0;
}
4

3 に答える 3

2

問題はanswerdatatypecharであるが、scanf()それを (少なくとも) 2 の長さの文字配列として扱うように指示されていることscanf()です。この場合、落書きする別の変数はなく、おそらくプログラムのスタックを破壊しています。

その問題を解決するにはいくつかの方法があります。

コードには他にもいくつかの問題があります。

  • if..then..else 構造に欠陥があります。最後の条件を除くすべての条件が真でない限り、「この有名人のように見えない」というメッセージは表示されません。
  • インデントはステートメントのネストを決定しません。ステートメントをグループ化するには、中括弧を明示的に使用する必要があります。
  • ユーザー入力を予想どおりに処理するために、yまたはで応答するように要求することができますn。プログラムが作成されると、「いいえ」の同義語としてXandが受け入れられます。7
于 2012-06-04T01:27:49.140 に答える
1

scanf("%1s", &answer);に変更する必要がありますscanf("%c", &answer);前者は文字列を読み取ろうとしますが、これには 2 つの文字が必要です。つまり、読み取られる 1 文字と、文字列を終了するヌル文字です。後者は文字を読み取るだけです。

1 文字だけであるため、文字列answerを読み取るとメモリが破損します。

于 2012-06-04T01:29:01.373 に答える
0

scanf問題は、次のように使用していることだと思います。

scanf("%1s", &answer);

あなたの変数answerはただのchar. C 文字列は常にヌル文字で終了することに注意してください。そのため、文字が 1 つしかない文字列では、文字自体とヌル終了文字の 2 つの文字を格納する必要があります。charその結果、その文字列を単一の文字に格納しようとすると、変数の直後にメモリが破棄されます。これscanfは、そこにヌル文字を配置しようとするためです。

これを修正するには、 の宣言answerを beに変更するか、単一の文字を読み取るようにchar answer[2]変更します。scanf

scanf("%c", &answer);

または代わりに を使用しますgetchar()

お役に立てれば!

于 2012-06-04T01:27:57.663 に答える