当前位置:我的异常网» C++ Builder » 求帮助 C语言小程序有一点异常
求帮助 C语言小程序有一点异常
www.myexceptions.net 网友分享于:2015-03-25 浏览:0次
求帮助 C语言小程序有一点错误。
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define gen_random( min, max ) (( rand() % (int)((( max ) + 1 ) - ( min ))) + ( min ))
int number = 0, input_number=0, score=100, times=7;
int gen_number()
{
srand( time(NULL) );
number = gen_random( 100, 999 );
return number;
}
void main_menu()
{
printf( "******************************************************\n" );
printf( "选择提示输入\"H\", 选择猜数输入\"G\", 选择重新开始输入\"Q\";\n您现在得分: %d, 您还有 %d 次机会.\n",
score, times );
printf( "******************************************************\n" );
}
void help_menu()
{
printf( "******************************************************\n" );
printf( "1. 判断输入的数字比产生的数字大还是小\n" );
printf( "2. 判断是奇数还是偶数\n" );
printf( "3. 判断是不是素数, 输出一定范围内的素数,( 例如:200 500)\n" );
printf( "4. 判断能不能被3整除\n" );
printf( "5. 判断能不能被5整除\n" );
printf( "6. 个位数是什么。\n" );
printf( "7. 随机生成两个数,其中一位是十位数;\n" );
printf( "8. 三位数之和\n" );
printf( "******************************************************\n" );
}
int is_over()
{
if ( score <= 0 )
{
printf( "你输了\n" );
printf( "你的得分为: %d\n", score<0 ? 0 : score );
printf( "产生的数字: %d\n", number );
return TRUE;
}
if ( input_number == number || times <= 0 )
{
if ( times <= 0 ) score = 0;
printf( score==0 ? "你输了\n" : "恭喜你答对了\n" );
printf( "你的得分为: %d\n", score );
printf( "产生的数字: %d\n", number );
return TRUE;
}
return FALSE;
}
int isprime( int m )
{
int i;
if ( m<2 ) return FALSE;
if ( m == 3 || m==2 ) return TRUE;
if ( m%2 == 0 ) return FALSE;
for( i=3; i*i<=m; i+=2 )
if ( !(m%i))
return FALSE;
return TRUE;
}
void show_prime( int min, int max )
{
int i;
for( i=min; i<=max; i++ )
{
if ( isprime( i ) )
printf( "%d ", i );
}
printf( "\n" );
}
void help_1()
{
if ( input_number == 0 )
{
printf( "你还没有输入猜测的数字\n" );
return;
}
printf( "你选择了提示信息1, 会扣当前分数的1/10!\n" );
score = score - (int)(score*0.1);
printf( "你上次输入的 %d %s产生的数字\n",
input_number,
input_number>number ? "大于" : "小于" );
}
void help_2()
{
printf( "你选择了提示信息2,会扣当前分的1/10\n" );
score = score - (int)( score*0.1 );
printf( "产生的数字是%s.\n", number%2==0 ? "偶数" : "奇数" );
}
void help_3()
{
printf( "你选择了提示信息3, 会扣当前分的1/10\n" );
score = score - (int)( score*0.1 );
if ( !isprime(number) ){
printf( "产生的数字不是素数\n" );
}else
{
printf( "产生的数字是素数\n" );
printf( "请输入要获知素数的范围( 例如: 200,500 ): " );
int min = 100, max = 999;
scanf( "%d,%d", &min, &max );
fflush( stdin );
show_prime( min, max );
}
}
void help_4()
{
printf( "你选择了提示信息4,会扣当前分的1/10\n" );
score = score - (int)( score*0.1 );
printf( "产生的数字%s被3整除\n", number%3==0 ? "能" : "不能" );
}
void help_5()
{
printf( "你选择了提示信息5,会扣当前分的1/10\n" );
score = score - (int)( score*0.1 );
printf( "产生的数字%s被5整除\n", number%5==0 ? "能" : "不能" );
}
void help_6()
{
printf( "你选择了提示信息6,当前分数减30\n" );
score -= 30;
printf( "产生的数字的个位数是 %d\n", number%10 );
}
void help_7()
{
printf( "你选择了提示信息7,当前分数减20\n" );
score -= 20;
srand( time(NULL) );
int n = gen_random( 1, 1000 );
int m = gen_random( 1000, 10000 );
int a = n%2 == 0 ? number%10 : (int)(number/100);
int s = (int)(number/10) % 10;
m%2 == 0 ? printf( "%d %d\n", a, s ) : printf( "%d %d\n", s, a );
}
void help_8()
{
printf( "你选择了提示信息7,当前分数减33\n" );
score -= 33;
int g = number % 10;
int s = (int)(number/10) % 10;
int b = (int)(number/100);
printf( "三个位数之和: %d\n", g+s+b );
}
void option_h()
{
void (*help_func[8])(void) = {help_1, help_2, help_3, help_4, help_5, help_6, help_7, help_8};
help_menu();
int ch = 0;
scanf( "%d", &ch );
fflush( stdin );
if( ch<=0 || ch>=9 )
{
printf( "输入错误,%d\n", ch );
return;
}
help_func[ch-1]();
}
void option_g()
{
printf( "请输入猜测的数字:" );
scanf( "%d", &input_number );
fflush( stdin );
times --;
}
void reset()
{
gen_number();
score = 100;
times = 7;
input_number = 0;
}
void option_q()
{
printf( "已退出,重新开始.\n" );
reset();
}
int main()
{
reset();
while( 1 )
{
char ch;
main_menu();
scanf( "%c", &ch );
fflush( stdin );
switch( ch )
{
case 'h': case 'H':
option_h();
break;
case 'g': case 'G':
option_g();
break;
case 'q': case 'Q':
option_q();
break;
default:
printf( "选项错误\n" );
}
if ( is_over() )
{
system( "pause" );
reset();
}
}
}
--------------------Configuration: test - Win32 Debug--------------------
Compiling...
test.c
C:\Users\Yu\Desktop\MyProjects\test\test.c(113) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Yu\Desktop\MyProjects\test\test.c(114) : error C2065: 'min' : undeclared identifier
C:\Users\Yu\Desktop\MyProjects\test\test.c(114) : error C2065: 'max' : undeclared identifier
C:\Users\Yu\Desktop\MyProjects\test\test.c(142) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Yu\Desktop\MyProjects\test\test.c(143) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Yu\Desktop\MyProjects\test\test.c(144) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Yu\Desktop\MyProjects\test\test.c(145) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Yu\Desktop\MyProjects\test\test.c(146) : error C2065: 'm' : undeclared identifier
C:\Users\Yu\Desktop\MyProjects\test\test.c(146) : error C2065: 'a' : undeclared identifier
C:\Users\Yu\Desktop\MyProjects\test\test.c(146) : error C2065: 's' : undeclared identifier
C:\Users\Yu\Desktop\MyProjects\test\test.c(152) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Yu\Desktop\MyProjects\test\test.c(153) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Yu\Desktop\MyProjects\test\test.c(154) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Yu\Desktop\MyProjects\test\test.c(155) : error C2065: 'g' : undeclared identifier
C:\Users\Yu\Desktop\MyProjects\test\test.c(155) : error C2065: 'b' : undeclared identifier
C:\Users\Yu\Desktop\MyProjects\test\test.c(160) : warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void )'
C:\Users\Yu\Desktop\MyProjects\test\test.c(160) : warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void )'
C:\Users\Yu\Desktop\MyProjects\test\test.c(160) : warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void )'
C:\Users\Yu\Desktop\MyProjects\test\test.c(160) : warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void )'
C:\Users\Yu\Desktop\MyProjects\test\test.c(160) : warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void )'
C:\Users\Yu\Desktop\MyProjects\test\test.c(160) : warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void )'
C:\Users\Yu\Desktop\MyProjects\test\test.c(160) : warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void )'
C:\Users\Yu\Desktop\MyProjects\test\test.c(160) : warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void )'
C:\Users\Yu\Desktop\MyProjects\test\test.c(162) : error C2143: syntax error : missing ';' before 'type'
C:\Users\Yu\Desktop\MyProjects\test\test.c(163) : error C2065: 'ch' : undeclared identifier
执行 cl.exe 时出错.
test.exe - 1 error(s), 0 warning(s)
------解决思路----------------------
0错误,0警告!
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define gen_random( min, max ) (( rand() % (int)((( max ) + 1 ) - ( min ))) + ( min ))
int number = 0, input_number=0, score=100, times=7;
int gen_number()
{
srand( time(NULL) );
number = gen_random( 100, 999 );
return number;
}
void main_menu()
{
printf( "******************************************************\n" );
printf( "选择提示输入\"H\", 选择猜数输入\"G\", 选择重新开始输入\"Q\";\n您现在得分: %d, 您还有 %d 次机会.\n",
score, times );
printf( "******************************************************\n" );
}
void help_menu()
{
printf( "******************************************************\n" );
printf( "1. 判断输入的数字比产生的数字大还是小\n" );
printf( "2. 判断是奇数还是偶数\n" );
printf( "3. 判断是不是素数, 输出一定范围内的素数,( 例如:200 500)\n" );
printf( "4. 判断能不能被3整除\n" );
printf( "5. 判断能不能被5整除\n" );
printf( "6. 个位数是什么。\n" );
printf( "7. 随机生成两个数,其中一位是十位数;\n" );
printf( "8. 三位数之和\n" );
printf( "******************************************************\n" );
}
int is_over()
{
if ( score <= 0 )
{
printf( "你输了\n" );
printf( "你的得分为: %d\n", score<0 ? 0 : score );
printf( "产生的数字: %d\n", number );
return TRUE;
}
if ( input_number == number
------解决思路----------------------
times <= 0 )
{
if ( times <= 0 ) score = 0;
printf( score==0 ? "你输了\n" : "恭喜你答对了\n" );
printf( "你的得分为: %d\n", score );
printf( "产生的数字: %d\n", number );
return TRUE;
}
return FALSE;
}
int isprime( int m )
{
int i;
if ( m<2 ) return FALSE;
if ( m == 3
------解决思路----------------------
m==2 ) return TRUE;
if ( m%2 == 0 ) return FALSE;
for( i=3; i*i<=m; i+=2 )
if ( !(m%i))
return FALSE;
return TRUE;
}
void show_prime( int min, int max )
{
int i;
for( i=min; i<=max; i++ )
{
if ( isprime( i ) )
printf( "%d ", i );
}
printf( "\n" );
}
void help_1()
{
if ( input_number == 0 )
{
printf( "你还没有输入猜测的数字\n" );
return;
}
printf( "你选择了提示信息1, 会扣当前分数的1/10!\n" );
score = score - (int)(score*0.1);
printf( "你上次输入的 %d %s产生的数字\n",
input_number,
input_number>number ? "大于" : "小于" );
}
void help_2()
{
printf( "你选择了提示信息2,会扣当前分的1/10\n" );
score = score - (int)( score*0.1 );
printf( "产生的数字是%s.\n", number%2==0 ? "偶数" : "奇数" );
}
void help_3()
{
printf( "你选择了提示信息3, 会扣当前分的1/10\n" );
score = score - (int)( score*0.1 );
if ( !isprime(number) ){
printf( "产生的数字不是素数\n" );
}else
{
printf( "产生的数字是素数\n" );
printf( "请输入要获知素数的范围( 例如: 200,500 ): " );
int min = 100, max = 999;
scanf( "%d,%d", &min, &max );
fflush( stdin );
show_prime( min, max );
}
}
void help_4()
{
printf( "你选择了提示信息4,会扣当前分的1/10\n" );
score = score - (int)( score*0.1 );
printf( "产生的数字%s被3整除\n", number%3==0 ? "能" : "不能" );
}
void help_5()
{
printf( "你选择了提示信息5,会扣当前分的1/10\n" );
score = score - (int)( score*0.1 );
printf( "产生的数字%s被5整除\n", number%5==0 ? "能" : "不能" );
}
void help_6()
{
printf( "你选择了提示信息6,当前分数减30\n" );
score -= 30;
printf( "产生的数字的个位数是 %d\n", number%10 );
}
void help_7()
{
printf( "你选择了提示信息7,当前分数减20\n" );
score -= 20;
srand( time(NULL) );
int n = gen_random( 1, 1000 );
int m = gen_random( 1000, 10000 );
int a = n%2 == 0 ? number%10 : (int)(number/100);
int s = (int)(number/10) % 10;
m%2 == 0 ? printf( "%d %d\n", a, s ) : printf( "%d %d\n", s, a );
}
void help_8()
{
printf( "你选择了提示信息7,当前分数减33\n" );
score -= 33;
int g = number % 10;
int s = (int)(number/10) % 10;
int b = (int)(number/100);
printf( "三个位数之和: %d\n", g+s+b );
}
void option_h()
{
void (*help_func[8])(void) = {help_1, help_2, help_3, help_4, help_5, help_6, help_7, help_8};
help_menu();
int ch = 0;
scanf( "%d", &ch );
fflush( stdin );
if( ch<=0
------解决思路----------------------
ch>=9 )
{
printf( "输入错误,%d\n", ch );
return;
}
help_func[ch-1]();
}
void option_g()
{
printf( "请输入猜测的数字:" );
scanf( "%d", &input_number );
fflush( stdin );
times --;
}
void reset()
{
gen_number();
score = 100;
times = 7;
input_number = 0;
}
void option_q()
{
printf( "已退出,重新开始.\n" );
reset();
}
int main()
{
reset();
while( 1 )
{
char ch;
main_menu();
scanf( "%c", &ch );
fflush( stdin );
switch( ch )
{
case 'h': case 'H':
option_h();
break;
case 'g': case 'G':
option_g();
break;
case 'q': case 'Q':
option_q();
break;
default:
printf( "选项错误\n" );
}
if ( is_over() )
{
system( "pause" );
reset();
}
}
}
文章评论