3

簡単なゲームをコーディングしました。cout/cin の使い方は知っていますが、printf/scanf に問題があります。以下のコードは、cout/cin でうまく機能します。質問は、それらをprintf/scanfに変換する方法ですか? コメントのコードが機能しないのはなぜですか?

編集: cout/cin 行を削除し、代わりに printf/scanf を使用すると、正しく機能しません。

#include <iostream>
#include <time.h>

using namespace std;

int main()
{
    srand(time(NULL));
    int min=0, max=1000, guess, counter=0;
    bool winner=false;
    char answer;

    while(counter<10){
        guess = rand()%(max-min)+min;
        // printf("Did you pick %d? \t", guess);
        // scanf("%c", &answer);
        cout << "Did you pick " << guess << "?\t";
        cin >> answer;
        if(answer=='y'){ // yes
            winner=true;
            // printf("Computer wins.\n");
            // printf("You picked: %d", guess);
            cout << "Computer wins." << endl;
            cout << "You picked: " << guess;
            break;
        }
        else if(answer=='m'){ // more
            min=guess;
            counter++;
        }
        else if(answer=='l'){ // less
            max=guess;
            counter++;
        }
    }
    if(winner==false){
        // printf("User wins.\n");
        cout << "User wins." << endl;
    }
    return 0;
}
4

1 に答える 1

2

問題は、scanf() が stdin から改行 '\n' 文字を削除しないため、次の反復で次の scanf() がそれを読み取って処理しようとし、入力を無視しているように見えることです。
代わりにこれを試してください:

scanf("\n%c", &answer);

そうすれば、改行が期待され、scanf() がそれを消費します。

于 2012-11-03T00:21:19.213 に答える