以下语法中出现的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;
}
}
}

慕后森
浏览 246回答 3
3回答

红颜莎娜

少了个头文件和取地址符,还有函数初始化位置不对,下面是正确的程序,最后说一句,在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;}}}

九州编程

&nbsp; &nbsp;goto语句是C语言中的跳转命令。使用方法:1goto&nbsp;label;&nbsp;&nbsp;&nbsp;&nbsp;label为本函数中声明的一个标号,执行goto后,跳转到该标号指定行处继续执行。&nbsp;&nbsp;&nbsp;&nbsp;一般来说,很多书都不推荐使用goto,不过很多书都给了一些很牵强的理由。在某些情况下需要使用goto,比如跳出多重循环。&nbsp;&nbsp;&nbsp;&nbsp;但是goto不能滥用,主要缺点有这几个:①影响程序可读性 &nbsp;②影响程序执行效率。分支语句会对指令预取造成很大的影响,而且跳转的位置有时分支预测单元可能预测不到。常用的跳转语句如if、for等,对这点影响都很小,但是goto不同,一个较长的跳转可能给指令预取单元带来很大的麻烦。&nbsp;&nbsp;&nbsp;&nbsp;所以说,不要滥用goto,除非你确定它不会给你造成麻烦。

RISEBY

可以看一下这个:#include<stdio.h>#include <stdlib.h>#include <time.h>int fun(int a,int b,int c){int d;printf( " error!\n请重新回答:" );printf("%d+%d=",a,b);scanf("%d",&d);if(d==c)return 0;elsereturn 1;}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];printf("%d+%d=",n[0],n[1]);scanf("%d",&n[3]);if(n[3]==n[2]){printf( "right!\n" );}else{while(fun(n[0],n[1],n[2]));printf( "right!\n" );}}}
打开App,查看更多内容
随时随地看视频慕课网APP