【问题标题】:C++ - Continuing a while loop upon exceptionC++ - 出现异常时继续循环
【发布时间】:2016-07-17 15:43:49
【问题描述】:

当在 C++ 中遇到异常时,程序是否会在捕获它时自动终止。有没有办法,如果异常在循环中被捕获,我可以跳过循环的其余部分并直接进入下一次迭代?

【问题讨论】:

  • 你能贴出advance()函数的代码吗?
  • 放置另一个 'if' 循环来检查是否 'in!= "South" ' - 并将两个语句放在条件中,这样它只会在 'in' 不等于 South 时执行.
  • 异常用trycatch块处理。我无法在您的代码中发现这些内容。
  • @Maertin if 不是循环
  • @Winter。对不起,我不能把那个代码放上去。这是一个学校作业,我可能会因为在网上发布比骨架更多的东西而遇到麻烦。

标签: c++ loops exception return


【解决方案1】:

有许多不同的方法可以解决这个问题。

  • 创建一个成员函数,在移动之前检查移动是否有效。调用代码需要在调用advance之前调用该函数,并且只有在移动有效时才调用advance

  • 使advance 成员函数返回一个值,指示玩家的位置是否提前。调用代码将需要测试返回值来决定是打印板子还是打印“重试”类型的消息。

  • 如果移动无效,则使advance 成员函数抛出异常。调用代码需要捕获异常。

还有很多其他方法可以解决这个问题。

【讨论】:

    【解决方案2】:

    首先,如果该代码片段与您复制粘贴的方式完全相同,则它存在一些语法错误。应该是这样写的:

         int main() {
         ...
         Person *p = new Person("Neo");
         ...
         string in;
         while(cin >> in) {
          if (in == "q") {
           break;
          }
          else if (in == /*One of the eight directions North ... Northwest*/) {
           p->advance(in);
          } //this bracket here ends the if. after the parentheses, nothing else will execute
          else {
           cerr << "Input one of the eight directions" < endl;
          }
         }
        }
    

    所以,是的,如果我理解正确你的问题,添加右括号应该可以解决它。我希望这是您所需要的并且对您有所帮助

    【讨论】:

    • 唯一的语法错误是p-&gt;printBoard() 后面缺少分号。消除对system("clear")p-&gt;printBoard() 的调用并不能解决问题。
    • 这不是我唯一改变的。虽然技术上不正确,但我将第二个“if”更改为“else if”,并将注释“八中之一....”更改为 /* */ 注释,因为它正在更改左括号t
    猜你喜欢
    • 2021-06-01
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 2018-03-20
    相关资源
    最近更新 更多