2

わかりましたので、いくつかのCを学ぼうとしています。番号を持ち、ユーザーに番号を尋ねさせるプログラムを作成しようとしています。

ユーザーにもう一度プレイするかどうかを尋ねると推測した後、すべてを受け入れました。Y または y と入力するとゲームが再起動し、'N' または 'n' と入力するとプログラムが終了します。

何をしようとしているのか

int   main(){

 while(playAgain == 'y' || 'Y') {

*playing code here*



printf("would you like to play again");
scanf("%s", &playAgain);


 }

壊れません...まったく...何を入力しても、何が間違っていますか?

4

3 に答える 3

3

ここでの問題 (コメント内のものは別として) は、条件付きセマンティクスです。playAgain == 'y' || 'Y'と解釈されたいplayAgain equals 'y' or playAgain equals 'Y'

代わりに、として解析されてい(playAgain equals 'y') or ('Y')ます。true は非ゼロとして定義され、非'Y'ゼロ (ASCII 値 131) で'Y'あるため、常に true であり、条件は常に true です。あなたがしたい:

while (playAgain == 'y' || playAgain == 'Y')
于 2013-04-13T23:40:27.933 に答える
2

ここでの playAgain の型は char だと思いますか?

scanf を正しく使用していません。http://www.cplusplus.com/reference/cstdio/scanf/

%s を指定した scanf は、文字列を読み取ることを想定しています。C では文字列は char* であるため、上位ビットを破棄するポインタ値で playAgain を書き込みます。これはほぼランダムな値であり、比較は失敗します。playAgain をキャラクターとして維持したい場合は、%c を使用する必要があります。

ちなみにドルではなく%です。

または、playAgain を文字列として実装することもできます。その場合、次のことができます。

int   main(){
    char playAgain[buffer_size];
    do{
        /*playing code here*/
        printf("would you like to play again");
        scanf("$s", &playAgain);
        lower_case_string( playAgain); // Call a function for changing string to lower case
    }while( !strcmp( "yes", playAgain) || !strcmp( "y", playAgain );
}
于 2013-04-13T23:44:28.627 に答える
1

コードのいくつかを修正する必要があります。

char playAgain = 'y';
while(playAgain == 'y' || playAgain == 'Y') // *1
{

    //*playing code here*

    printf("would you like to play again? ");
    scanf("%s", &playAgain); //*2
}

*1 各条件を AND または OR (&& または ||) で区切って入力する必要があります。

*2 scanf パラメータを使用する正しい形式は、「$」ではなく「%」を使用することです。ここで使用の詳細情報を確認してください: http://www.cplusplus.com/reference/cstdio/scanf/

コードを修正すると、ユーザーが「y」または「Y」で始まる任意の単語を入力するたびにループ while が繰り返されます。たとえば、ループを再開するこのコードでは「Yellow」が実行されます。導入された完全な文字列を制御したい場合は、char 配列または文字列を使用して、次のような補助関数と比較する必要があります。

bool compareArrays(char* str1, char* str2, int lenght)
{
    int i;
    for (i=0; i<lenght; ++i)
        if (str1[i] != str2[i]) return false;
    return true;
}
于 2013-04-14T00:16:04.347 に答える