C 程序连续循环
我创建了一个程序,要求输入两个介于100和150之间的数字。此外,这些数字之间的差值必须小于或等于10。我运行程序,但它不会结束。即使输入正确的值,它也会不断循环C 程序连续循环,c,C,我创建了一个程序,要求输入两个介于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,
#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;
}
#包括
#包括
#定义FALSE 0
#定义为真!错误的
内部主(空)
{
双a,b;
双ε=10.000000001;
int标志_1、标志_2;
标志_1=假;
标志2=假;
做
{
printf(“输入100.0和150.0之间的两个值\n”);
printf(“每个值之间的差值必须小于或等于10.0\n\n”);
printf(“输入值a:”);
scanf(“%lf”、&a);
printf(“输入值b:”);
scanf(“%lf”、&b);
如果((a<100.0)| |(a>150.0))| |((b<100.0)| |(b>150.0)))
{
printf(“在100.0和150.0之间输入错误\n\n”);
标志_1=真;
}
如果((a-b)>(ε))| |((a-b)*(-1))>(ε)))
{
printf(“错误\n\n”);
标志2=真;
}
其他的
{
printf(“值a和b为:a=%lf,b=%lf\n\n”,a,b);
}
}而((flag_1==TRUE)|(flag_2==TRUE));
系统(“暂停”);
返回0;
}
您需要立即将标志1
和标志2
的值重置为假
do {
否则,它们在循环的上一次迭代中的值将保持不变。使用:
do {
flag_1 = flag_2 = FALSE;
您必须在while循环开始时将标志重置为FALSE。假设这种情况:
a=180和b=50。
如果案例且标志1
设置为TRUE
,程序将进入。由于它是TRUE
,循环将再次运行。现在,在这个迭代中,即使您输入了正确的a和b值,由于标志是TRUE
,程序仍将继续运行。在所有printf
中尝试使用%f
初始化a和b。另外,尝试添加flag_1=FALSE;标志2=假代码>在do…while
循环开始时。重置循环内的标志,否则一旦条件为false,则条件为false。换句话说。Moveflag_1/2==FALSE在检查项目的有效性之前,在do
循环中执行code>。我不明白为什么当我输入正确的值并且没有设置为TRUE的标志时,它会重复。虽然程序现在可以运行了,但是谢谢。因为一旦这些值中的任何一个被设置为TRUE
,它们在代码中就不会被设置回FALSE
,所以如果其中任何一个只被设置一次,循环将永远运行。