我创建了一个程序,要求100和100之间的两个数字。 150.这些数字之间的差异也必须小于或等于10.我运行程序,但即使我输入正确的值,它也不会连续循环。
#include <stdio.h>
#include <stdlib.h>
#define FALSE 0
#define TRUE !FALSE
int main(void)
{
double a, b;
double epsilon = 10.000000001;
int flag_1, flag_2;
flag_1 = FALSE;
flag_2 = FALSE;
do
{
printf("Enter in two values between 100.0 & 150.0\n");
printf("The difference between each value must be less than or equal to 10.0\n\n");
printf("Enter in value a: ");
scanf("%lf", &a);
printf("Enter in value b: ");
scanf("%lf", &b);
if (((a < 100.0)||(a > 150.0))||((b < 100.0)||(b > 150.0)))
{
printf("Error Enter between 100.0 & 150.0\n\n");
flag_1 = TRUE;
}
else if (((a - b) > (epsilon))||(((a - b)*(-1)) > (epsilon)))
{
printf("Error\n\n");
flag_2 = TRUE;
}
else
{
printf("Values a & b are: a = %lf, b = %lf\n\n", a, b);
}
}while((flag_1 == TRUE)||(flag_2 == TRUE));
system ("pause");
return 0;
}
答案 0 :(得分:2)
您需要立即将flag_1
和flag_2
的值重置为FALSE
do {
否则,它们在循环的前一次迭代中的值仍然存在。使用:
do {
flag_1 = flag_2 = FALSE;
答案 1 :(得分:1)
您必须在while循环的开头将标志重置为FALSE。假设这种情况:
a =180 and b =50.
该计划将在if
案例中输入,flag_1
设置为TRUE
。由于它是TRUE
,循环将再次运行。现在,在此迭代中,即使您输入a和b的正确值,由于标志为TRUE
,程序将继续运行。