0

私は最初の計算機を作成しようとしましたが、オンラインでいくつかの例を見つけたので、フローの観点から簡単にするために変更しました。ただし、これからフローを変更すると:

#include <stdio.h>

main()
{
    char operator;
    float num1,num2;

    printf("Enter an operator (+, -, *, /): ");
    scanf("%c" ,&operator);
    printf("Enter first operand: ");
    scanf("%f" ,&num1);
    printf("Enter second operand: ");
    scanf("%f" ,&num2); 

    switch(operator)
    {
        case '+':
            printf("num1+num2=%.2f\n" ,num1+num2);
            break;
        case '-':
            printf("num1-num2=%.2f\n" ,num1-num2);
            break;
        case '*':
            printf("num1*num2=%.2f\n" ,num1*num2);
            break;
        case '/':
            printf("num1/num2=%.2f\n" ,num1/num2);
            break;
        default: //of operator is other than +, -, *, /, erros message shown
        printf("Error! Invalid operator, this is basic math only.\n");
    }       
    return 0;
}

これに:

#include <stdio.h>

main()
{
    char operator;
    float num1,num2;


    printf("Enter first operand: ");
    scanf("%f" ,&num1);
    printf("Enter an operator (+, -, *, /): ");
    scanf("%c" ,&operator);
    printf("Enter second operand: ");
    scanf("%f" ,&num2); 

    switch(operator)
    {
        case '+':
            printf("num1+num2=%.2f\n" ,num1+num2);
            break;
        case '-':
            printf("num1-num2=%.2f\n" ,num1-num2);
            break;
        case '*':
            printf("num1*num2=%.2f\n" ,num1*num2);
            break;
        case '/':
            printf("num1/num2=%.2f\n" ,num1/num2);
            break;
        default: //of operator is other than +, -, *, /, erros message shown
        printf("Error! Invalid operator, this is basic math only.\n");
    }       
    return 0;
}

基本的にフローを次のように変更しました: 演算子を入力し、最初の数字を入力し、次に 2 番目の数字を入力します。To: 最初の番号を入力し、次に演算子を入力してから、2 番目の番号を入力します。私の問題は、これを行うときに Enter 演算子が表示されることですが、プログラムは演算子を入力するオプションをスキップして、最初の番号を入力してから 2 番目の番号を入力するように求めます。応答はデフォルトのスイッチです。

4

3 に答える 3

0

入力バッファに改行が残っています。

を使用するscanf("%f",...と、%f先頭の空白は消費されますが、数字の後の末尾の空白は消費されません。通常は\n.

を使用する場合scanf("%c",...、は先頭の空白を消費%c、どちらかの後の末尾の空白も消費しませんchar

残りの空白 (たとえば、\n前の からscanf()) を消費するには、単純に前%cにスペースを置きます。

// scanf("%c" ,&operator);
scanf(" %c" ,&operator);  // add space.
于 2013-09-22T05:45:42.903 に答える
0

scanf最初の演算子を読み込んだ後に入力する改行は、2 番目のscanf呼び出しで使用されます。詳細な説明については、この質問を参照してください。

要するに、このような関数を書き、すべての呼び出しの後にscanf呼び出します。

void clear_stdin(void)
{
    while(getchar() != '\n');
}
于 2013-09-22T00:00:01.300 に答える
0

これは、最初の入力を入力したときに改行文字がバッファに残っているscanfためです。次scanfは、それを入力として受け取り、getchar()すべての後に a を配置するだけscanf()で解決します

于 2013-09-22T00:01:01.153 に答える