c语言goto怎么回事

#include<stdio.h>
#include <time.h>
main()
{
int i,n[4];
srand( time(NULL) );
n[0]=rand()%10;
n[1]=rand()%10;
for( i = 0; i < 20;i++ )
{
n[2]=n[1]+n[0];
loop:
printf("%d+%d=",n[0],n[1]);
scanf("%d",n[3]);

if(n[3]==n[2])
{
printf( "right!" );
}
else
{
printf( " error!\n重新输入" );
goto loop;
}
}
}

    goto语句是C语言中的跳转命令。使用方法:

goto label;

    label为本函数中声明的一个标号,执行goto后,跳转到该标号指定行处继续执行。

    一般来说,很多书都不推荐使用goto,不过很多书都给了一些很牵强的理由。在某些情况下需要使用goto,比如跳出多重循环。

    但是goto不能滥用,主要缺点有这几个:①影响程序可读性  ②影响程序执行效率。分支语句会对指令预取造成很大的影响,而且跳转的位置有时分支预测单元可能预测不到。常用的跳转语句如if、for等,对这点影响都很小,但是goto不同,一个较长的跳转可能给指令预取单元带来很大的麻烦。

    所以说,不要滥用goto,除非你确定它不会给你造成麻烦。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-02
goto 后面一般有个标记变量 这里是loop当执行到goto loop;时就跳到标记loop:并执行loop:后面的语句
第2个回答  2013-01-02
goto易跳过对变量的初始化,而变量的初始化,只要在它的作用域内,就必须保证对其进行初始化,,,, ,这是在c 的限制,,,,,,c语言木有这样的限制 可以这样使用,对追问的解答
第3个回答  推荐于2017-11-25
少了个头文件和取地址符,还有函数初始化位置不对,下面是正确的程序,最后说一句,在c语言中尽量不要使用goto语句,因为这个语句会限制人们的思想的
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
int i,n[4];
for( i = 0; i < 20;i++ )
{
srand( time(NULL) );
n[0]=rand()%10;
n[1]=rand()%10;
n[2]=n[1]+n[0];
loop:
printf("%d+%d=",n[0],n[1]);
scanf("%d",&n[3]);
if(n[3]==n[2])
{
printf( "right!\n" );
}
else
{
printf( " error!\n重新输入" );
goto loop;
}
}
}追问

首先,非常感谢,然后不用goto用什么重复执行呢,goto有什么问题

追答

不用goto的话可以用其他语句代替,比如for,while,具体情况的话看实际是什么,goto的话不是这个语句有问题,而是多用这个语句的话会限制你的思想,越到后面越难写出好程序

本回答被提问者和网友采纳
第4个回答  2013-01-02
就是返回到loop下面的内容。。。。