1

OK ..だから私はそのコードを持っていて、DoWhileステートメントを正しく取得できません...

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

int main ()
{
    int nWinsPC, nWinsPlayer;
    char cChoose[1];
    do {
    system("cls");
        printf("Vamos jogar um jogo?\n");
        printf("-\n");
        printf("Escolha (p)edra, p(a)pel ou (t)esoura: ");
        getchar();
        scanf("%1[^\n]", cChoose);
    } while(cChoose != "p");
    system("pause");
}

そのシステムはとても簡単なはずです...Playerが「p」を入力しない間、CHOOSE SCREENはループのままですが、これを機能させることはできません...

:(

前もって感謝します

編集

問題が解決しました:

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

int main ()
{
    int nWinsPC, nWinsPlayer;
    char cChoose[2];
    do {
    system("cls");
        printf("Vamos jogar um jogo?\n");
        printf("-\n");
        printf("Escolha (p)edra, p(a)pel ou (t)esoura: ");
        scanf("%s", cChoose);
    } while ( strcmp(cChoose,"p") );
    system("pause");
}
4

4 に答える 4

3
int cChoose;
...
    cChoose = getchar();
} while( cChoose != 'p' && cChoose != EOF );

おそらく空白を処理するため、scanfを使用するのが好きなようです。代わりに、次を試してください。

int cChoose;
...
    do cChoose = getchar(); while( isspace( cChoose ));
} while( cChoose != 'p' && cChoose != EOF );

(これは奇妙な書き方であり、実際にはdo / whileを使用する別の例にすぎませんが、通常は次のように記述されます。

int cChoose;
...
    while( isspace( cChoose = getchar()))
        ;
} while( cChoose != 'p' && cChoose != EOF );
于 2012-10-08T17:09:17.457 に答える
1

Cで2つの文字列を比較するために使用する必要がある方法は、次のとおりですstrcmp

while ( strcmp( cChoose, "p" ) )

strcmp文字列が同一の場合は0(false)を返し、異なる場合はゼロ以外の値を返します。

あなたの声明

while ( cChoose != "p" )

メモリ内の2つのポインタの位置を比較します。そのうちの1つはcChooseスタック上のデータを指し、もう1つは"p"静的データを指します。それらは決して等しくなることはありません。

于 2012-10-08T17:09:18.273 に答える
0

" != "の代わりにstrcmpを使用する必要があります。 cChoose の内容を確認してください。

cChoose は、メモリ内の配列の開始位置を指すポインタです。メモリ内の「p」開始位置とは絶対に等しくないため、プログラムで無限ループが発生します。

于 2012-10-08T17:17:13.277 に答える
0

声明:

strcmp ( cChoose, "p" )

2 つの文字列が等しい場合にゼロを返す を使用する必要があります。さらに、cChoose を文字列として使用している場合、文字列は常にヌル文字 ('\0') で終了するため、cChoose の長さとして 2 文字を使用する必要があります。したがって、次を使用します。

char cChoose[2];

編集:

scanf() の前の getchar() は最初の 'p' を取るため、最初は何も起こりません。2 回目では、getchar() は最初の行に残っている '\n' を最初に受け取り、scanf は "p" を適切に読み取ります。getchar() を削除すると、コードは正常に機能します。

于 2012-10-08T18:04:32.310 に答える