C ++ goto语句执行而不调用

时间:2014-02-16 17:14:42

标签: c++

我正在尝试制作一个简单的代码来演示Goto语句的好处。

我把goto标签;在if语句中:

 int x;
   cin>>x;

   if (x == 10){
      goto win;
   }else{
      cout<<"its not a 10";
   }

   win: cout<<"you win";

当x不是10时会出现问题,如果是9那么它就会显示出来 这不是10你赢了

我试图把胜利:cout&lt;&lt;“你赢了”;在if语句之前仍然存在同样的问题。

3 个答案:

答案 0 :(得分:11)

如果x不等于10,则会出现else块。然后控制将继续向前流动,直到达到cout<<"you win"。仅仅因为在cout之前有一个标签,并不意味着它只会在goto win;之后发生。它仍然是该功能控制流程的一部分。

这根本不适合goto(甚至不可论证)。你应该这样做:

if (x == 10){
   cout<<"you win";
}else{
   cout<<"its not a 10";
}

如果您真的想将cout<<"you win"移动到另一个代码块,则需要将其放在自己的函数中:

void print_win() {
  cout<<"you win";
}

然后在第一个print_win();块中执行if

答案 1 :(得分:1)

这是用于演示您使用goto语句所犯错误的代码:控制流被转移到一个逻辑流(x == 10)和其他所有情况下达到的点。

演示goto语句的好处非常困难。你必须想出一个不是if或者开关的逻辑。

答案 2 :(得分:0)

您的代码示例演示了goto语句没有任何好处;

它包含一个逻辑错误,因为控制不包含x的值将实现标签获胜。所以它总会显示

you win

如果没有goto语句,代码会好得多。例如

int x;
cin >> x;

if ( x == 10 )
{
   cout << "you win";
}
else
{
   cout << "its not a 10";
}