我正在尝试比较两个输入文件中的数据,看看是否有一组比另一组少

时间:2011-11-29 04:59:15

标签: c++ arrays fstream

我正在尝试将一个文件中的数据与另一个文件进行比较以查看它是否“适合”另一个文件。我认为一组是“孔”,另一组是“块”。我试图看看所有圆形块是否适合至少一个圆孔。如果它们都合适,我想输出“是”。如果一个不合适,我想输出“NO,所有圆块都不适合至少一个洞。”

继承我的代码:

    bool fits = false;

    for (int i=0; i<M; i++)
    {
      if (btype[i] == Circles)
      {
        CA[i] = (3.14 * (D[i] * D[i]));
      }

      for (int j=0; j<N; j++)
      {
        if (htype[j] == Circle)
        {
          CA[j] = (3.14 * (A[j] * A[j]));
        }

        if (CA[i] < CA[j])
        {
          fits = true;
          break;
        }
      }

      if (!fits)
      {
        break;
      }   
    }
    if (fits)
    {
      cout << "5. YES, all circle blocks fit a hole. "
           << endl;
    }
    else
    {
      cout << "5. NO, all circle blocks don't fit a hole. "
           << endl;
    }

代码表现不正常。当我将一个圆值放入输入文件中时,肯定会使程序cout为NO,它给我一个YES。我无法理解。

2 个答案:

答案 0 :(得分:1)

你有if语句在最后一个for循环中进行打印。

for (int j=0; j<N; j++)
{
   if (htype[j] == Circle)
   {
      CirArea[j] = (3.14 * (A[j] * A[j]));
   }


   if (CirArea[i] < CirArea[j])
   {
      cout << "5. YES, all circle blocks fit in a hole. " << endl;
   }
   else
   {
      cout << "5. NO, all circle blocks don't fit a hole. " << endl;
   }
}

如果你想根据一个人不适合打印信息,如果所有人都适合打印另一条信息你可以这样做。

float fits = 0.0;
float nofit = 0.0;
bool result;

for (int i=0; i<M; i++)
{
  result = false;

  if (btype[i] == Circles)
  {
    CirArea[i] = (3.14 * (D[i] * D[i]));
  }

  for (int j=0; j<N; j++)
  {
    if (htype[j] == Circle)
    {
      CirArea[j] = (3.14 * (A[j] * A[j]));
    }

    if (CirArea[i] < CirArea[j])
    {
       result = true;
       //exit inner loop
       break;
    }
  }

  if (!result)
  {
     //exit outer loop
     break;
  }
}

if (result)
{
    cout << "5. YES, all circle blocks fit in a hole. " << endl;
}
else
{
    cout << "5. NO, all circle blocks don't fit a hole. " << endl;
}

答案 1 :(得分:0)

由于 cout 的行位于 for 循环内,其中 N 次迭代位于 之内循环 M 迭代,看起来应该打印 M * N