【发布时间】:2015-01-30 04:21:58
【问题描述】:
我正在尝试使用单个错误检查函数来检查多个其他函数中的错误。但是,在运行程序时,它会卡在一个循环中并且不会从中中断。一旦应用程序获得有效输入,它应该继续执行下一个函数。然而,即使错误检查返回 0,它也会重复 fStartBalance 函数。我是一个初学者,所以我不太擅长故障排除。这是适用的代码:
/* 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 */
感谢您的帮助。
【问题讨论】:
-
查看
while循环:您想检查failed是否等于1。但是,您将其设置为1!请改用failed == 1。 -
记得打开所有警告。如果你使用
gcc,至少使用-Wall。它会警告你一些愚蠢的错误,比如你的failed = 1错字。 -
函数中的'while'语句:fValidateFloat从不循环执行,所以最好写成'if'语句
-
关于 @Riley 的 while 循环(之前评论过),变量 'failed' 未初始化为任何特定值(只是该地址的堆栈上发生了什么。建议:设置声明时将“失败”变量设置为某个已知值。这也是为什么文字应该位于左侧的一个主要示例,因此编译器会捕获这些类型的错误,因此您不必这样做。
-
对 scanf 的调用需要注意:1) 格式字符串需要一个前导 ' ' 来消耗空格,如前面的换行符 2) 需要检查返回的值以确保操作/格式转换成功
标签: c function error-handling ansi