程序不断循环

时间:2015-05-26 06:11:27

标签: c

我创建了一个程序,要求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;
}

2 个答案:

答案 0 :(得分:2)

您需要立即将flag_1flag_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,程序将继续运行。