Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不使用跳转语句的结构化解决方案 < SaaunsC++文本< /P>_C++ - Fatal编程技术网

不使用跳转语句的结构化解决方案 < SaaunsC++文本< /P>

不使用跳转语句的结构化解决方案 < SaaunsC++文本< /P>,c++,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 <&

删除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;
  }
解决方案:

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;
  }
结构化解决方案的输出不会产生与goto解决方案相同的结果。。。 我看不出有什么问题

还有,还有什么方法可以消除后藤?-我能不能不用旗子,只是赞美一下这个条件。
谢谢…

引发异常。

引发异常。

您需要添加条件:

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 << " ";
       if (!done) // <-- Add this line
          cout << "* ";
    }
   cout << "." << endl;
   done = false;
  }
if (!done) cout << "* ";

您需要添加条件:

if (!done) cout << "* ";

编写这种循环转义功能的一个好方法是返回;陈述采取:

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;
}

编写这种循环转义功能的一个好方法是返回;陈述采取:

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;
}

首先,您的格式非常难阅读。这很有帮助:

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;
}
现在我不知道这个Schaum是谁,但他错了。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;
}
现在我不知道这个Schaum是谁,但他错了。goto是本案中使用的完全合法的声明。但这是你需要它的唯一原因。消除后藤对你毫无益处。现在您有了一个额外的变量,每个循环都需要一个额外的分支和测试



我建议您避免使用他的建议。

在for循环中嵌套try块对我来说似乎不是一个好主意。异常应保留在异常情况下,我们没有迹象表明这是一个好主意。在for循环中嵌套try块对我来说似乎不是一个好主意。异常应保留在异常情况下,我们没有迹象表明这是真的;不是有效的代码。编译错误。是否有特定的原因要消除goto?多级中断和继续是合法的使用,其他的几乎没有。说真的,这是一个我想使用gotoneither is const int 5。。。但是很容易理解他的意思。另外,Schaum真的使用这样的格式吗?这很令人困惑。我花了一些时间才意识到k循环只应用于一个if语句。它的身体真的需要支架;不是有效的代码。编译错误。是否有特定的原因要消除goto?多级中断和继续是合法的使用,其他的几乎没有。说真的,这是一个我想使用gotoneither is const int 5。。。但是很容易理解他的意思。另外,Schaum真的使用这样的格式吗?这很令人困惑。我花了一些时间才意识到k循环只应用于一个if语句。它的主体确实需要大括号。为什么不在else语句中,在两行cout的周围加上大括号呢?这似乎与原来的更加一致。除了最里面的for语句只适用于一个语句,而且cout-Yeah-在格式混乱中遗漏了这一点。为什么我总是把所有的东西都包起来,而且我已经习惯了…为什么不在else语句中,在cout行的两边加上大括号呢?这似乎与原来的更加一致。除了最里面的for语句只适用于一个语句,而且cout-Yeah-在格式混乱中遗漏了这一点。这也是为什么我总是把所有东西都包装起来,而且我已经习惯了……在这种情况下,总有办法使用Todd Gardner这样的GoTo,我建议总是尝试找到它们。随着时间的推移,代码会发生变化,现在看起来合理的跳槽可能会在以后成为一个问题。我相信这是困扰教师的偏执狂之一。他们害怕意大利面代码,这是他们应该害怕的。我也同意,应该避免goto's。但是在这种情况下,它并没有使代码变得不易管理,因为我认为goto版本比另一个版本更容易阅读。所以goto是不好的,但是中断和继续是可以的?我一直认为继续、中断和返回并不是goto那么坏-一半的能力-如果你可以说…继续和中断是goto。他们只去一个地方。这次跳转和休息的唯一区别是,休息只上升一级。但我们想提高两个层次。所以,如果你说后藤更容易被滥用,那么是的。但是上面的goto的用法与break完全相同,只是它是2级而不是1级。在这种情况下,使用Todd Gardner这样的goto总是有办法的,我建议总是尝试找到它们。随着时间的推移,代码会发生变化,现在看起来合理的跳槽可能会在以后成为一个问题。我相信这是困扰教师的偏执狂之一。他们害怕意大利面代码,这是他们应该害怕的。我也同意,应该避免goto's。但在这种情况下,实际上不是马
king代码不易管理,因为我认为goto版本比另一个版本更容易阅读。所以goto不好,但是中断和继续可以吗?我一直认为继续、中断和返回与goto相比不是很坏-一半的能力-如果你可以说…继续和中断就是goto。他们只去一个地方。这次跳转和休息的唯一区别是,休息只上升一级。但我们想提高两个层次。所以,如果你说后藤更容易被滥用,那么是的。但是上面的goto的用法与break完全相同,只是它是2级而不是1+1级。为了使它更干净,丢失else并将两个cout语句合并为一个。我本来以为cout可以在一开始合并,但它改变了原始代码的含义,我花了一段时间才实现。我对它进行了编辑,在最远处添加了一些大括号,以使其更加清晰。+1。为了使它更干净,丢失else并将两个cout语句合并为一个。我本来以为cout可以在一开始合并,但它改变了原始代码的含义,我花了一段时间才实现。我对它进行了编辑,在中最远的部分添加了一些大括号,以使其更加清晰。