ANSI C:使用函数检查用户输入时出错

时间:2014-12-02 01:56:35

标签: c function error-handling ansi

我正在尝试使用单个错误检查功能来检查多个其他功能中的错误。但是,在运行程序时,它会陷入循环并且不会中断。应用程序获得有效输入后,应继续执行下一个功能。但是它重复fStartBalance函数,即使错误检查返回0.我是一个初学者,所以我不太擅长故障排除。以下是适用的代码:

/* Begin fValidateFloat */
int fValidateFloat(float input, float minValue, float maxValue)
{
    int failed = 0;

    while (input < minValue)
    {
        printf("\nError: Input too low, please enter a value greater than or equal to %.2f.", minValue);
        failed = 1;
        return failed;
    }
    while (input > maxValue)
    {
        printf("\nError: Input too high, please enter a value less than or equal to %.2f.", maxValue);
        failed = 1;
        return failed;
    }
} /* End fValidateFloat */

/* Begin fStartBalance */
float fStartBalance(void)
{
    float startBalance; /* Declare variable */
    int failed;

    while (failed = 1)
    {
        printf("\n\nNow enter your current balance in dollars and cents: "); /* Prompt user to input current balance */
        scanf("%f", &startBalance);
        fflush(stdin);
        failed = fValidateFloat(startBalance, 0, 3.4e+38);
    }

    return startBalance; /* Return variable */
} /* End fStartBalance */

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

fflush(stdin);未定义

在未执行while语句的情况下,您永远不会从fValidateFloat()返回任何值:

        return failed;
    }
} /* End fValidateFloat */

在相同的函数中,while循环没有任何意义,请改用if语句:

while (input < minValue)
{
    printf("\nError: Input too low, please enter a value grea%.2f.", minValue);
    failed = 1;
    return failed;
}

您在while循环中将失败设置为1,而不是将其与1进行比较:

while (failed = 1)