1

ユーザーに入力を求める必要があり、ユーザーは浮動小数点数を書き込むことができる必要があり、2つの数値を計算する必要がありますが、isdigitテスト後に問題が発生します...整数を入力しますcontinue;

これは私のコードです:

#include <stdio.h>
#include <ctype.h>
char get_choice(void);
float calc(float number1, float number2);

int main()
{

    float userNum1;
    float userNum2;
    get_choice();

    printf("Please enter a number:\n");
    while ((scanf("%f", &userNum1)) == 1)
    {
        if (!isdigit(userNum1))
        {
            printf("Please enter a number:\n");
            continue;
        }


        printf("Please enter another number:\n");
        while ((scanf("%f", &userNum2) == 1))
        {
            if (!isdigit(userNum2))
            {
                printf("Please enter a number:/n");
                continue;
            }
            else if (userNum2 == '0')
            {
                printf("Please enter a numer higher than 0:\n");
                continue;
            }

        }

    }
    calc(userNum1, userNum2);
    return 0;
}

float calc(float number1, float number2)

{
    int answer;

    switch (get_choice())
        {
            case 'a':
                answer = number1 + number2;
                break;
            case 's':
                answer = number1 - number2;
                break;
            case 'm':
                answer = number1 * number2;
                break;
            case 'd':
                answer = number1 / number2;
                break;
        }
    return answer;
}

char get_choice(void)

{
    int choice;

    printf("Enter the operation of your choice:\n");
    printf("a. add        s. subtract\n");
    printf("m. multiply   d. divide\n");
    printf("q. quit\n");

    while ((choice = getchar()) == 1 && choice != 'q')
    {

        if (choice != 'a' || choice != 's' || choice != 'm' || choice != 'd')
        {
            printf("Enter the operation of your choice:\n");
            printf("a. add        s. subtract\n");
            printf("m. multiply   d. divide\n");
            printf("q. quit\n");
            continue;
        }


    }
    return choice;
}

関数もアップロードしてしまったことをお詫びしますが、私は初心者なので問題があるかもしれません。乾杯。

4

3 に答える 3

7

isDigit()文字入力のみを受け取ります。入力が正しく取得されていることを確認する最良の方法は、次を使用することです

if(scanf("%f", &userNum) != 1) {
    // Handle item not float here
}

scanf()正しくスキャンされたアイテムの数を返すので。

于 2013-02-03T06:45:53.793 に答える
4

IsDigit()関数は、文字が10進数であるかどうかのみをチェックします。

言ってみましょう:

int isdigit ( int c );

cが10進文字かどうかを確認します。

10進数は、0 1 2 3 4 5 6 789のいずれかになります。

cが10進数の場合、isdigit()関数はゼロ以外を返します。それ以外の場合は、0を返します。

于 2013-02-03T06:55:48.633 に答える
2

次のようなこともできます。

int get_float(char *val, float *F){
    char *eptr;
    float f;
    errno = 0;
    f = strtof(val, &eptr);
    if(eptr != val && errno != ERANGE){
        *F = f;
        return 1;
    }
    return 0;

val浮動小数点数関数を指す場合は 1 を返し、この数値を*Fに置きます。それ以外の場合は 0 を返します。

于 2013-02-03T07:44:29.697 に答える