3 回答

TA貢獻1842條經驗 獲得超13個贊
少了個頭文件和取地址符,還有函數初始化位置不對,下面是正確的程序,最后說一句,在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 關注
- 270 瀏覽
添加回答
舉報