CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

函数指针的问题..

楼主luyg614(CouCou)2004-12-02 21:56:47 在 C/C++ / C语言 提问

#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

相关问题

  • 函数指针
  • 指针函数
  • 函数指针
  • 函数指针
  • 函数指针
  • 函数指针和指针函数
  • 函数指针,唉.......
  • 函数指针的问题
  • 函数指针怎么用?
  • 函数指针的问题

关键词

  • getchar
  • mul
  • sum
  • ch
  • printf
  • vartype
  • scanf
  • getch
  • lib
  • break

得分解答快速导航

  • 帖主:luyg614
  • iicup
  • insulator

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo