1

私はObjectiveCを学び始めたばかりで、単純なコンソールベースの計算機をいじっています。まず、ユーザーにどの操作を実行したいか、その操作を実行する2つの数値を尋ね、計算後に答えを出力します。

その部分はすべて正常に機能しているようです。私が実装しようとしている次の部分は、ユーザーが不要になると判断するまで計算を続けられるようにすることです。これに取り組む私の考えは、ユーザーがscanf();を介して'y'または'no'を介して続行するかどうかを確認するために、チェックの最後にdo/whileループ内に計算機の実行を配置することでした。ユーザーがどの応答を選択するかを確認します。私が遭遇しているのは、最初のパスの終わり、scanf()を介した入力の要求です。無視され、プログラムは終了します。

私はいくつかの助けを望んでいました:)トラブルシューティング、オンライン調査(scanf()の空白の問題で何かを見つけましたが、それは役に立ちませんでした)、およびいくつかの推測を通じて、できる限りのデューデリジェンスを行いましたしかし、今日まで私は成功していません。以下は私のコードのメインセクションです:

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];


    float answer;
    char op,repeat;
    NSLog(@"Welcome to my sexy calculater, (_(_)!!"); //don't mind me being weird

    Calculater *deskCalc;   
    deskCalc=[[Calculater alloc] init];

    do
    {

        [deskCalc clear];//clear calc

        op =[deskCalc getOperator]; //get +,-,*,or/
        [deskCalc getNumbers]; //get two numbers

        [deskCalc calculate: op];
        answer=[deskCalc accumulater];

        NSLog(@"Your answer is %f!", answer);


        NSLog(@"Would you like to calculate something again(y/n)?");
        scanf("%c",&repeat);
        //NSLog(@"You typed: %c", repeat);

    } while (repeat=='y');

    [deskCalc release];

    [pool drain];
    return 0;
}

助けてくれてありがとう。十分な情報を提供していない場合は、お詫び申し上げます。私に知らせてください、そして私はもっと多くを提供することをいとわないでしょう。どうもありがとうございました!

4

1 に答える 1

0

ScanfがCのwhileループを1つおきにスキップするのを見てみたいと思うかもしれません。

ユーザーが「y」、「n」、またはEnterキーを押す前にヒットしたその他のキーのストリームを入力した後、scanf()がstdinにある改行を確実に読み取るように追加の作業を行う必要があります。

この他の投稿も関連しているようです:scanf()がこのコードで無限ループを引き起こしているのはなぜですか?

于 2011-02-23T19:15:47.873 に答える