0

tic tac toeを再生するプログラムを作成することにしましたが、ifステートメントで失敗します。それは私が他の下に置いたものを使用します。私はそれを2時間見つめていました、そして私はただ何も悪いことを見つけることができません!コードは次のとおりです。

#include <stdio.h>
#include <process.h>

int main()
{
char ans,ans2;
double a,b,c,d,e,f;
printf("Do you want to play? (y/n)\n"); //must make a loop
scanf ("%c",&ans);
if (ans == 'y')
{
    printf("Do you want to be first?\n");
    scanf ("%c",&ans2);
    if (ans2 == 'y')
    {
        printf("Make your choice.\n");
        printf(" 1 2 3\n");
        printf("a | | \n");
        printf(" - - -\n");
        printf("b | | \n");
        printf(" - - -\n");
        printf("c | | \n");
    }
    else if (ans2 == 'n')
    {
        printf("option under construction!\n"); //must write this situation
    }
    else
        printf("Invalid choice!\n");
}
else if (ans == 'n')
{
    printf("Goodbye!\n");
    system("pause");
}
else
    printf("Invalid choice!\n");

}

プログラムは(明らかに)ほぼ終了していないことに注意してください。

PS私は昨日プログラミングを始めました。

4

2 に答える 2

4

問題はscanf、文字を読み取るために使用すると、その文字を読み取るだけでなく、改行も入力することだと思います。次のscanf呼び出しでは、意図した文字ではなく、その改行が読み取られます。

最も簡単な解決策は、scanf空白(改行など)をスキップするように指示することです。

scanf(" %c", &ans);

の前のスペースに注意してください%c

于 2013-03-25T13:15:23.017 に答える
0

Joachimが述べたように、問題はscanf特に2番目の問題です。述べたように、スペースではなく改行を読み取ります。

とにかく、私の標準的な魂はfflush(stdin)前になりscanf ("%c",&ans2)ます。

ところで:各ifおよびelseステートメントには中括弧を使用してください。どこかで新しい行をハッキングした後のばかげたエラーを減らし、ここでの読みやすさを向上させます。私の最初の推測は、入れ子になった中括弧とケースが間違っていたということです。

コメントを通して学んだように編集:使用しないfflush(stdin)でください!これは機能する可能性がありますが、ANSI-Cでの動作が未定義であるためfflush()、偶然にすぎません。stdin

于 2013-03-25T14:16:21.643 に答える