2

私は C を習得するための探求を続けており、現在、2 つのオペランドと演算子を要求するために、基本的な電卓を継続的に使用するための演習に取り組んでいます。演算子が「+」でない場合、エラー メッセージが表示されます。現在、いくつかの問題に直面しています。

  1. 「+」を入力すると、2 回表示されます。私のコードには、これが起こることを示すものは何もありません。
  2. 最初のオペランドでも同じ問題が発生します。また、入力が完了したことをコードに伝える方法もわかりません。
  3. 2 番目のオペランドは問題ありませんが、入力を終了する方法がまだわかりません。
  4. 結果が表示された直後に正しくループバックしますが、再度プロンプトを表示する前にエラー メッセージが表示されます。

http://tinypic.com/r/34ew5cx/6

注: scanf で二重数を読み取るために lf を使用していることは知っていますが、何らかの理由で lf が機能せず、f が正常に機能しているため、無視してください :)

コードをフォーマットする方法/このサイトで質問する方法/このような問題に対処する方法に関する一般的な提案とともに、観察を歓迎します。ご協力いただきありがとうございます!

int main () {
char mychar;
    int a;
    double op1;
    double op2;

    printf("Welcome to Andrew Hu's calculator program!\n"); //Greeting

    while(1)
    {    printf("Enter a mathematical operation to perform:\n");
        scanf("%c", &mychar);

    if(mychar == '+') //Valid Operators
        a = 1;
    else
        a = 0;


    if(a == 0) //Operator Checker, error if invalid
        printf("\nError, not a valid operator\n");
    else if(a == 1){
        printf("%c\n", mychar),
        printf("Enter OP1:\n"),
        scanf("%f", &op1),
        printf("%f\n", op1),
        printf("Enter OP2:\n"),
        scanf("%f\n", &op2),
        printf("%f\n", op2),
        printf("Result of %f %c %f = %f\n",
                op1, mychar, op2, (op1 + op2) );
    }
    }        
4

2 に答える 2

0

まず、double を読み取るには scanf に %lf が必要です。それ以外の場合は、float を読み取って double の半分に格納するだけです...

  scanf("%lf", &op1),

すべての float 引数が最初に double に昇格されるため、これは printf には必要ありません...

于 2013-04-17T17:45:23.777 に答える