1

我需要询问用户的输入,他/她应该有能力写一个浮点数,我需要对这两个数字进行一些计算,但我在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() 函数仅检查字符是否为十进制数字。

让我们说:

int isdigit ( int c );

检查 c 是否为十进制数字字符。

十进制数字可以是:0 1 2 3 4 5 6 7 8 9。

如果 c 是十进制数字,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 回答