如果在函数C ++中满足条件,则完全停止程序

时间:2014-02-16 00:23:14

标签: c++

目前正在使用C ++中的一个简单的Triangle分类器程序,并且它运行得很好,除了一两件事。

好的,我有四个功能,一个用于处理错误,例如输入的值小于零或输入的长度不允许三角形物理上可行;一个用于分类器,根据提供的值确定它的三角形类型;一个计算使用side作为double值的区域使用Heron公式计算区域,最后是main函数,它按照这个顺序调用所有这些函数,并将side赋予它们作为参数,以便if语句可以跟着他们。

我的问题是,当用户输入边长为0时,它会输出用户输入的值等于零的错误消息,然后打印出它的等边三角形。在if语句中满足条件时,我需要更改什么才能使程序完全停止?我认为问题是,条件正常,但因为我在ExceptionHandling之后调用了Classifier函数,所以它打印出它的等边三角形。

我还想设置一个循环,让用户尝试再次输入一个值,如果他们输入的值导致在ExceptionHandling函数中遇到一个条件,但我尝试设置一个while循环,它只是导致无限循环。

我在下面提供了一些代码片段,但是,我无法发布完整代码,因为它是一项任务,我不希望其他任何人找到它。 :P

...

void ExceptionHandling(double side1, double side2, double side3)
{
    if (side1 < 1 || side2 < 1 || side3 < 1)
    {
        cout << "Error: All values must be greater than zero." << endl;
    }
}

double Classifier(double side1, double side2, double side3)
{
    if (side1 == side2 && side2 == side3)
    {
        cout << "This would be classified as an equilateral triangle." << endl;
    }

...

int main()
{
    double side1;
    cout << "Enter the longest side: ";
    cin >> side1;

        ...

    ExceptionHandling(side1, side2, side3);
    Classifier(side1, side2, side3);
    Area(side1, side2, side3);
}

我很欣赏一个愚蠢的解释,因为我非常想知道..提前致谢。

2 个答案:

答案 0 :(得分:0)

如果您想退出无效输入(而不是让用户再试一次),那么您应该做的是:

int main() {
  ...
  if (not ValidInput(side1, side2, side3))
  {
    std::cerr << "error: invalid input.\n";
    return EXIT_FAILURE;
  }
  Classifier(side1, side2, side3);
  Area(side1, side2, side3);
}

如果你想要一个循环,那么你可以这样做:

int main() {
  double side1, side2, side3;
  GetInput(side1, side2, side3);
  while (not ValidInput(side1, side2, side3)
  {
    std::cout << "invalid input. Try again.\n";
    GetInput(side1, side2, side3);
  }
  Classifier(side1, side2, side3);
  Area(side1, side2, side3);
}

第二个循环示例:

int main() {
  double side1 = 0.0, side2 = 0.0, side3 = 0.0;
  while (not ValidInput(side1, side2, side3)
  {
    GetInput(side1, side2, side3);
    if (not ValidInput(side1, side2, side3))
    {
      std::cout << "invalid input. Try again.\n";
    }
  }
  Classifier(side1, side2, side3);
  Area(side1, side2, side3);
}

这里只在一个地方调用GetInput,因此您不需要使用单独的函数。

答案 1 :(得分:0)

这是一种非传统的分离 - 但是如果你愿意,你可以这样做:ExceptionHandling函数检查“一切都好”并且只有在一切正常时才返回true:

bool ExceptionHandling(double side1, double side2, double side3)
{
    if (side1 < 1 || side2 < 1 || side3 < 1)
    {
        cout << "Error: All values must be greater than zero." << endl;
        return false;
    }
    return true;
}

double Classifier(double side1, double side2, double side3)
{
    if (side1 == side2 && side2 == side3)
    {
        cout << "This would be classified as an equilateral triangle." << endl;
    }

...

int main()
{
    double side1;
    cout << "Enter the longest side: ";
    cin >> side1;

        ...

    if(ExceptionHandling(side1, side2, side3)) {
        Classifier(side1, side2, side3);
        Area(side1, side2, side3);
    }
}

只有“一切正常”,才能完成对分类器和区域的调用。

现在命名有点集中,但你可以很容易地改变,例如 ExceptionHandling 可以称为 preconditionsMet