3 回答
TA贡献1842条经验 获得超12个赞
少了个头文件和取地址符,还有函数初始化位置不对,下面是正确的程序,最后说一句,在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;
}
}
}
TA贡献1785条经验 获得超4个赞
goto语句是C语言中的跳转命令。使用方法:
1 | goto label; |
label为本函数中声明的一个标号,执行goto后,跳转到该标号指定行处继续执行。
一般来说,很多书都不推荐使用goto,不过很多书都给了一些很牵强的理由。在某些情况下需要使用goto,比如跳出多重循环。
但是goto不能滥用,主要缺点有这几个:①影响程序可读性 ②影响程序执行效率。分支语句会对指令预取造成很大的影响,而且跳转的位置有时分支预测单元可能预测不到。常用的跳转语句如if、for等,对这点影响都很小,但是goto不同,一个较长的跳转可能给指令预取单元带来很大的麻烦。
所以说,不要滥用goto,除非你确定它不会给你造成麻烦。
TA贡献1856条经验 获得超5个赞
可以看一下这个:
#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;
else
return 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" );
}
}
}
- 3 回答
- 0 关注
- 238 浏览
添加回答
举报