不使用跳转语句的结构化解决方案

iwa*_*ram 1 c++

来自Schaums C++文本

删除goto-说使用标志

代码段:

const int N2 = 5;
int i, j, k;

  for (i = 0; i < N2; i++)
  { for (j = 0; j < N2; j++)
    { for (k = 0; k < N2; k++)
       if (i + j + k > N2)
           goto esc;
       else
          cout <<  i + j + k << " ";
       cout << "* ";
    }
   esc: cout << "." << endl;
  }
Run Code Online (Sandbox Code Playgroud)

解决方案:

const int 5;
int i, j, k;
bool done = false;
  for (i = 0; i < N2; i++)
  { for (j = 0; j < N2 && !done; j++)
    { for (k = 0; k < N2 && !done; k++)
       if (i + j + k > N2)
           done true;
       else
          cout <<  i + j + k << " ";
       cout << "* ";
    }
   cout << "." << endl;
   done = false;
  }
Run Code Online (Sandbox Code Playgroud)

结构化解决方案的输出不会产生相同的结果......就像转到...我看不出问题

  1. 另外,消除goto的另一种方法是什么? - 我可以不使用旗帜而只是赞美这种情况.

谢谢 ...

Tod*_*ner 6

编写这种循环转义功能的好方法是返回; 声明.采取:

const int N2 = 5;

void inner_loop(const int i) {
   for (int j = 0; j < N2; ++j)
   {
      for (int k = 0; k < N2; ++k)
      {
        if (i + j + k > N2)
           return;

        cout <<  i + j + k << " ";
      }
      cout << "* ";
   }
}


for (int i = 0; i < N2; ++i)
{
  inner_loop(i);
  cout << "." << endl;
}
Run Code Online (Sandbox Code Playgroud)