函数指针的问题..
#include <stdio.h>
void sum(int);
void mul(int);
void lib(void (* var)(int),int number);
void main(void)
{
int x;
void (* var)(int);
char ch;
printf("Input x=");
scanf("%d",&x);
printf("\n");
printf("s) is 1+2+3+-----+x\n");
printf("m) is x!\n");
ch=getchar();
while(getchar()!='\n')
continue;
switch(ch)
{
case 's': var=sum;break;
case 'm': var=mul;break;
}
lib(var,x);
getch();
}
void sum(int number)
{
int i;
int sum=0;
for(i=1;i<=number;i++)
sum+=i;
printf("1+2+3+----+%d=%d\n",number,sum);
}
void mul(int number)
{
int i;
int mul=1;
for(i=1;i<=number;i++)
mul*=i;
printf("%d!=%d\n",number,mul);
}
void lib(void (*var)(int),int number)
{
(*var)(number);
}
编译过了 没错误 也没警告 就是最后运行的时候过不去,出现那个调试的
问题点数:50、回复次数:4Top
1 楼iicup(双杯献酒)回复于 2004-12-02 22:13:15 得分 10
我在VC6.0下运行正常,
输出:
Input x=s
s) is 1+2+3+-----+x
m) is x!
1+2+3+----+-858993460=0
估计是空指针的问题。
最好
(1)在switch前添加
var = 0;
(2)将
lib(var,x);
修改成
if(var != 0)lib(var,x);
或者将
(*var)(number);
修改成
if(var != 0)(*var)(number);
Top
2 楼insulator(天外来客)回复于 2004-12-02 22:13:23 得分 40
#include <iostream.h>
#include<stdio.h>
void sum(int);
void mul(int);
void lib(void (* var)(int),int number);
void main(void)
{
int x;
void (* var)(int);
char ch;
printf("Input x=");
scanf("%d",&x);
printf("\n");
printf("s) is 1+2+3+-----+x\n");
printf("m) is x!\n");
getchar();
ch=getchar();
switch(ch)
{
case 's': var=sum;break;
case 'm': var=mul;break;
}
lib(var,x);
getchar();
getchar();
}
void sum(int number)
{
int i;
int sum=0;
for(i=1;i<=number;i++)
sum+=i;
printf("1+2+3+----+%d=%d\n",number,sum);
}
void mul(int number)
{
int i;
int mul=1;
for(i=1;i<=number;i++)
mul*=i;
printf("%d!=%d\n",number,mul);
}
void lib(void (*var)(int),int number)
{
(*var)(number);
}
Top
3 楼zhoory(●Ant_Caesar●)回复于 2004-12-02 22:16:29 得分 0
#include <stdio.h>
typedef void (*vartype)(int);
void sum(int);
void mul(int);
void lib(vartype var,int number);
void main(void)
{
int x;
vartype var;
char ch;
printf("Input x=");
scanf("%d",&x);
printf("\n");
printf("s) is 1+2+3+-----+x\n");
printf("m) is x!\n");
ch=getch();
/* while(getchar()!='\n')
continue;*/
switch(ch)
{
case 's': var=sum;break;
case 'm': var=mul;break;
}
lib(var,x);
getch();
}
void sum(int number)
{
int i;
int sum=0;
for(i=1;i<=number;i++)
sum+=i;
printf("1+2+3+----+%d=%d\n",number,sum);
}
void mul(int number)
{
int i;
int mul=1;
for(i=1;i<=number;i++)
mul*=i;
printf("%d!=%d\n",number,mul);
}
void lib(vartype var,int number)
{
(*var)(number);
}Top
4 楼iicup(双杯献酒)回复于 2004-12-02 22:17:43 得分 0
修改后:
#include <stdio.h>
void sum(int);
void mul(int);
void lib(void (* var)(int),int number);
void main(void)
{
int x;
void (* var)(int);
char ch;
printf("Input x=");
scanf("%d",&x);
printf("\n");
printf("s) is 1+2+3+-----+%d\n",x);
while(getchar()!='\n')
continue;
ch=getchar();
printf("m) is %c!\n",ch);
var = 0;
switch(ch)
{
case 's': var=sum;break;
case 'm': var=mul;break;
}
if(var)lib(var,x);
getchar();
}
void sum(int number)
{
int i;
int sum=0;
for(i=1;i<=number;i++)
sum+=i;
printf("1+2+3+----+%d=%d\n",number,sum);
}
void mul(int number)
{
int i;
int mul=1;
for(i=1;i<=number;i++)
mul*=i;
printf("%d!=%d\n",number,mul);
}
void lib(void (*var)(int),int number)
{
if(var)(*var)(number);
}Top




