Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 程序连续循环_C - Fatal编程技术网

C 程序连续循环

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,

我创建了一个程序,要求输入两个介于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;
}
#包括
#包括
#定义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。换句话说。Move
flag_1/2==FALSEdo
循环中执行code>。我不明白为什么当我输入正确的值并且没有设置为TRUE的标志时,它会重复。虽然程序现在可以运行了,但是谢谢。因为一旦这些值中的任何一个被设置为
TRUE
,它们在代码中就不会被设置回
FALSE
,所以如果其中任何一个只被设置一次,循环将永远运行。