| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1004 人关注过本帖
标题:有个小问题关于switch语句调用
只看楼主 加入收藏
lengfenqiyue
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-8-25
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
有个小问题关于switch语句调用
switch(a)
            {
            case 1:write();break;
            case 2:{void insert(struct student *stu, struct student *stu2, int count);}break;
            case 3:{void del( struct student *stu, struct student *stu1, int count );break;}
            case 4:{void rewrite(struct student *stu, int i);break;}
            case 5:main_menu();break;
            default: printf("\n输入错误重新选择");main_menu();break;
            }


其中insert del rewrite函数类型都为void,声明也都写了,vc6.0编译成功,但是除了case 1 write之外,其他功能都不能用,这是为什么?怎么解决?
搜索更多相关主题的帖子: switch 语句 
2010-08-25 08:47
Rexfield
Rank: 6Rank: 6
来 自:幻想乡
等 级:侠之大者
威 望:1
帖 子:240
专家分:484
注 册:2010-7-28
收藏
得分:4 
貌似是它们的作用域只在switch中………………

If you're not failing every now and again, it's a sign you're not doing anything very innovative.
2010-08-25 08:59
lengfenqiyue
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-8-25
收藏
得分:0 
楼上的意思是变量要定义成全局么?
2010-08-25 09:03
lengfenqiyue
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-8-25
收藏
得分:0 
我把全部程序贴出来大家帮忙看一下把,谢谢了,



#include<stdio.h>
#include<stdlib.h>
#include<string.h>

xxwh();
int write();
void display( struct student *stu, int i );
void insert( struct student *stu, struct student *stu2, int count );
void del( struct student *stu, struct student *stu1, int count );
void rewrite(struct student *stu, int i);
main_menu();

struct student
{
 char name[20];
 int xh;
 int chi;
 int math;
 int eng;
 double average;
};


int write()                                            /*录入函数*/
{int xh,eng,chi,math, i = 1;
 char name[64],res[1024];
 
 FILE *fp;
 
 if ((fp=fopen("d:\\file.txt", "w+")) == 0) {
  printf("无法创建文件..\n");
  exit(1);
 }
 printf("输入第%d个同学姓名(返回菜单请输入exit): ", i);
 scanf("%s", name);
 
 while (strcmp(name, "exit") != 0) {
  printf("学号:");
  scanf("%d", &xh);

  printf("语文:");
  scanf("%d", &chi);
  printf("数学:");  
  scanf("%d", &math);
  printf("英语:");
  scanf("%d", &eng);
  
  sprintf(res, "name: %s, xh: %d, eng: %d, chi: %d, math: %d\n", name, xh, eng,chi,math);
  fputs(res, fp);
  
  printf("输入第%d个同学姓名(返回菜单请输入exit): ", ++i);
  scanf("%s", name);
 }
 
 fclose(fp);
 main_menu();
 return 0;}


void display( struct student *stu, int i )                        /*显示函数*/
{
 printf("学号\t姓名\t平均成绩\n");
 while ( i > 0 )
 {
  printf("%d\t%s\t%.2f\n", stu->xh , stu->name, stu->average );
  i--;
  stu++;
 }
}



void insert( struct student *stu, struct student *stu2, int count )            /*插入函数*/
{
 int i;
 int j;
 struct student stu1;
 printf("请输入要插入的学员信息:\n");
 printf("学号:");
 scanf("%d", &stu1.xh);
 printf("姓名:");
 fflush(stdin);
 gets(stu1.name);
 printf("三门成绩:\n\n");
 printf("语文:");
 scanf("%d", &stu1.chi );
 printf("数学:");
 scanf("%d", &stu1.math );
 printf("英语:");
 scanf("%d", &stu1.eng );
 (stu1.average) = ((stu1.chi+stu1.math+stu1.eng)/3.0);
 for ( i = 0; i < count; i++ )
 {
  if ( stu1.average > (stu+i)->average )
  {
   for ( j = count; j>i; j-- )
   {
    *(stu+j) = *(stu+j-1);
   }
   *(stu+j) = stu1;
  }
 }
 printf("插入新学员后的学员信息如下");
 display( stu2, ++count);
}


void del( struct student *stu, struct student *stu1, int count )                /*删除函数*/
{
 int delxh;
 int i;
 int j;
 printf("请输入要删除的学员的学号:");
 scanf("%d", &delxh);
 for ( i = 0; i < count; i++ )
 {
  if ( delxh == (stu+i)->xh )
  {
   for ( j = i; j < count; j++ )
   {
    *(stu + j) = *(stu + j + 1);
   }
  }
 }
 printf("删除后的学员信息如下:\n");
 display( stu1, count);
}

void rewrite(struct student *stu, int i)
{
    int k;
    int q;
    printf("\n\t\t请输入要修改的学生学号:");
    scanf("%s",q);
    for(k=0;k<99999;k++)
    {
         if(stu[i].xh==q)
         {
            printf("\n\t\t以下是您要修改的学生纪录:");
            printf("\n\t\t________________________________");
            printf("\n\t\t学号:  %s",stu[i].xh);
            printf("\n\t\t姓名:  %s",stu[i].name);
            printf("\n\t\t语文:  %s",stu[i].chi);
            printf("\n\t\t数学:  %s",stu[i].math);
            printf("\n\t\t英语:  %s",stu[i].eng);
            printf("\n\t\t________________________________");
            printf("\n\t\t请输入修改后的学生信息:");
            printf("\n\t\t输入姓名:");
            scanf("%s",&stu[i].name);
            printf("\n\t\t输入学号:");
            scanf("%s",&stu[i].xh);
            printf("\n\t\t输入语文成绩:");
            scanf("%s",&stu[i].chi);
            printf("\n\t\t输入数学成绩:");
            scanf("%s",&stu[i].math);
            printf("\n\t\t输入英语成绩:");
            scanf("%s",&stu[i].eng);
            printf("\n\t\t是否继续修改?(Y/N):");
            if (getchar()=='y')
            {
                void rewrite();
            }
            return;
         }
    }
    printf("\n\t\t没有改学生的信息");
    printf("\n\t\t按任意键返回主菜单");
    getchar();
    return;
}

main_menu()
{
    int i=0;
    printf("    ******  成绩管理系统  ******    \n");
    printf("\n1:信息维护\t     2: 信息查询\n");
    printf("\n3:成绩系统\t     4: 退出\n");
    printf("************************************\n");
    printf("\n按数字输入选择:");
    scanf("%d",&i);
    while(i!=0)
    {
            switch(i)
        {    case 1:xxwh();break;

        }
    }

}

xxwh()
{    int a=0;
        printf("1:录入学生信息\n");
        printf("2:增加学生信息\n");
        printf("3:删除学生信息\n");
        printf("4:修改学生信息  \n");
        printf("5:返回\n");
        printf("***************   信息维护  *******************\n");
        printf("\n按数字选择输入:");
        scanf("%d",&a);
        while(a!=0)
        {
            switch(a)
            {
            case 1:write();break;
            case 2:{void insert(struct student *stu, struct student *stu2, int count);}break;
            case 3:{void del( struct student *stu, struct student *stu1, int count );break;}
            case 4:{void rewrite(struct student *stu, int i);break;}
            default: printf("\n输入错误重新选择");main_menu();break;
            }
        }
   
}


int main()
{
 main_menu();
}
2010-08-25 09:05
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:4 
楼主的程序是想实现学习信息管理吗,你仔细看一下你的代码,
函数的调用关系是:main -> main_menu -> xxwh -> write ->main_menu,这样不是又回去了吗。
另外在你的xxwh的switch语句中case2之后的函数,都是声明的形式,怎么执行啊,他们需要的参数你的传进去啊。
2010-08-25 10:54
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:4 
程序是顺序执行的 如果函数在开始就定义了,后面的函数 就不需要再声明了。
而且函数的声明 只是声明而已,跟调用 八辈子都撇不上关系

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2010-08-25 10:59
CImage
Rank: 1
等 级:新手上路
帖 子:18
专家分:6
注 册:2010-8-24
收藏
得分:4 
个人觉得,比如说a=2,则执行case 2,对吧?而在case 2中不就仅仅对insert(struct student *stu, struct student *stu2, int count)函数进行声明了而已吗?不知道是不是这样理解的。
2010-08-25 11:32
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:4 
好混乱 都不想说了

清风拂暮(木)
2010-08-25 14:05
快速回复:有个小问题关于switch语句调用
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016117 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved