qq_59618736 2021-06-23 17:49 采纳率: 100%
浏览 19
已结题

为什么这个程序只能录入信息,就回退回菜单,没法进行2,3,4💀

#include<stdio.h> 

#include<math.h>

#include<stdlib.h>

#define n 2

#define m 1

#define w 1

typedef struct

{

int top;

int range[5];

int mark[5];

int itemnum;}

itemnode;

typedef struct

{

int schoolnum;

int score;

int mscore;

int wscore;

itemnode c[m+w];

}

headnode;

headnode h[n];

void input()

{

int i,j,k,s;

for(i=0;i<n;i++)

{

h[i].schoolnum=0;

h[i].score=0;

h[i].mscore=0;

h[i].wscore=0;

}

for(i=0;i<n;i++)

{

printf("\n运动队编号:");

scanf("%d",&h[i].schoolnum);

for(j=0;j<m+w;j++)

{

printf("\n项 目 编 号:");

scanf("%d",&h[i].c[j].itemnum);

printf("\n取前3或前5名:");

scanf("%d",&h[i].c[j].top);

while(h[i].c[j].top!=3&&h[i].c[j].top!=5)

{printf("\n输入错误, 请重新输入!:");

scanf("%d",&h[i].c[j].top);break;} 

printf("\n获得几个名次:");

scanf("%d",&k);

for(s=0;s<5;s++)

h[i].c[j].range[s]=0;

for(s=0;s<k;s++)

{

l:printf("\n名 次:");

scanf("%d",&h[i].c[j].range[s]);

if(h[i].c[j].top==3)

switch(h[i].c[j].range[s])

{

case 0:h[i].c[j].mark[s]=0;

break;

case 1:h[i].c[j].mark[s]=5;

break;

case 2:h[i].c[j].mark[s]=3;

break;

case 3:h[i].c[j].mark[s]=2;

break;

default:{puts(" 输入错误!请重新输入!");

goto l;}

}

else

switch(h[i].c[j].range[s])

{

case 0:h[i].c[j].mark[s]=0;

break;

case 1:h[i].c[j].mark[s]=7;

break;

case 2:h[i].c[j].mark[s]=5;

break;

case 3:h[i].c[j].mark[s]=3;

break;

case 4:h[i].c[j].mark[s]=2;

break;

case 5:h[i].c[j].mark[s]=1;

break;

default:{puts("输入错误!请重新输入!");

goto l;}

}

h[i].score=h[i].score+h[i].c[j].mark[s];

if(j<=m-1)

h[i].mscore=h[i].mscore+h[i].c[j].mark[s];

else

h[i].wscore=h[i].wscore+h[i].c[j].mark[s];

}

printf("\n");

}

}

}

void output()

{

int choice,i,j,t;

int a[n];

int sign;

do

{printf("\n********1.按运动队编号输出*****\n");

printf("**********2.按运动队总分输出********\n");

printf("**********3.按男团总分輸出**********\n");

printf("**********4.按女团总分输出**********\n");

printf("*******请根据提示迸行操作!:");

scanf("%d",&choice);

printf("\n");

switch(choice)

{

case 1:for(i=0;i<n;i++)

{

printf("\n运动队编号:%d\n",h[i].schoolnum);

printf("运动队总分:%d\n",h[i].score);

printf("男团总分:%d\n",h[i].mscore);

printf("女团总分:%d\n",h[i].wscore);

printf("\n");

}

break;

case 2:for(i=0;i<n;i++) 

a[i]=i;

for(i=0;i<n;i++)

{

for(j=i+1;j<n;j++) 

if(h[a[i]].score<h[j].score)

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

}

for(i=0;i<n;i++)

{

printf("\n运动队编号:%d\n",h[a[i]].schoolnum);

printf("\n运动队总分:%d\n",h[a[i]].score);

printf("\n男团总分:%d\n",h[a[i]].mscore);

printf("\n女团总分:%d\n",h[a[i]].wscore);

printf("\n");

}

break;

case 3:for(i=0;i<n;i++)

a[i]=i;

for(i=0;i<n;i++)

{

for(j=i+1;j<n;j++)

if(h[a[i]].mscore<h[j].mscore)

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

}

for(i=0;i<n;i++)

{

printf("\n运动队编号:%d\n",h[a[i]].schoolnum);

printf("\n运动队总分:%d\n",h[a[i]].score);

printf("\n男团总分:%d\n",h[a[i]].mscore);

printf("\n女团总分:%d\n",h[a[i]].wscore);

printf("\n");

}

break;

case 4:for(i=0;i<n;i++)

a[i]=i;

for(i=0;i<0;i++)

{

 for(j=i+1;i<n;i++)

if(h[i].wscore<h[j].wscore)

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

}

for(i=0;i<n;i++)

{

printf("\n运动队编号:%d\n",h[a[i]].schoolnum);

printf("\n运动队总分:%d\n",h[a[i]].score);

printf("\n 男团总分:%d\n",h[a[i]].mscore);

printf("\n女团总分:%d\n",h[a[i]].wscore);

printf("\n");

}

break;

}

printf("是否继续操作(1/0) ?:");

scanf("%d",&sign);

printf("\n");

}

while(sign==1);

}

void chaxun()

{

int choice;

int i,j,k,s;

printf("\n*****1.按运动队编号查询\n");

printf("\n*****2.按项目编号查询\n");

printf("\n*****选择查询方式:");

scanf("%d",&choice);

switch(choice)

{

case 1:

do

{

printf("要查询的运动队编号:");

scanf("%d",&i);

if((i>n)||(i<=0))

printf("错误:这个运动队没有参加此次运动会!\n");

else 

{

printf("*********要查询的项目编号:");

scanf("%d",&j);

if(j>m+w||j==0)

printf(" ******此次运动会没有这个项目*******\n");

else 

{

printf("这个项目取前%d名,该运动队的成绩如下:\n", h[0].c[j-1].top);

for(k=0;k<5;k++)

if(h[i-1].c[j-1].range[k]!=0)

printf("名次:%\n",h[i-1].c[j-1].range[k]);

}

}

printf("是否继续操作(1/0) ?:");

scanf("%d",&s);

printf("\n");

}while(s==1);

break;

case 2:

do

{

printf("要查询的项目编号:");

scanf("%d",&s);

if(s>m+w||s==0)

printf("此次运动会不包括这个项目\n");

else 

{

printf("该项目取前%d名,取得名次的运动队\n" ,h[0].c[s-1].top);

for(i=0;i<n;i++)

for(j=0;j<5;j++)

if(h[i].c[s-1].range[j]!=0)

printf("运动队编号:%d,名次:%d\n",h[i].schoolnum,h[i].c[s-1].range[j]);

}

printf("是否继续操作(1/0) ?:");

scanf("%d",&i);

printf("\n");

}while(i==1);

break;

}

}

void write()

{

int i,j,s;

FILE *fp;

if((fp=fopen("sportsdata结果.txt","a+" ))==NULL)

{

printf("不能打开文件\n");

exit(1);

}

fputs("运动队编号 运动队总分 男子总分 女子总分",fp);

fputs("\n",fp);

for(i=0;i<n;i++) 

{

fprintf(fp,"%2d\t\t",h[i].schoolnum);

fprintf(fp,"%2d\t\t",h[i].score);

fprintf(fp,"%2d\t\t" ,h[i].mscore);

fprintf(fp,"%2d",h[i].wscore);

fputs("\n",fp);

}

fclose(fp);

}

void read()

{

FILE *fp;

int i,j,s;

if((fp=fopen("sportsdata.txt","r"))==NULL)

{

printf("文件不存在,不能打开文件!\n");

exit(1);

}

for(i=0;i<n;i++)

{

fscanf(fp,"%d",&h[i].schoolnum);

//for(j=0;j<m+w;j++)

//{

fscanf(fp,"%d",&h[i].c[j].itemnum);

fscanf(fp,"%d",&h[i].c[j].top);

// for(s=0;s<5;s++)

//{

fscanf(fp,"%d",&h[i].c[j].range[s]);

// }

//}

}

fclose(fp);

}

int main()

{ FILE *fp;

int choice;

int flag1=1,flag2=1;

system("cls");

do

{

printf("\n####*************欢迎使用程序**************####\n" );

printf("\n####*********校级运动会分数统计系统********####\n" );

printf("\n\n ####^^^^^^^^^^1.录入信息^^^^^^^^^^^^^^^####\n");

printf("\n\n ####^^^^^^^^^^2.读取信息^^^^^^^^^^^^^^^####\n" );

printf("\n\n ####^^^^^^^^^^3.显示信息^^^^^^^^^^^^^^^####\n");

printf("\n\n ####^^^^^^^^^^4.查询信息^^^^^^^^^^^^^^^####\n");

printf("\n\n ####^^^^^^^^^^5.退出程序^^^^^^^^^^^^^^^####\n"); 

printf("\n####*****************************************####\n");

printf("\n\n请根据提示选择操作!:");

scanf("%d",&choice);

if(choice==1)

flag1=0;

else 

if((fp=fopen("sportsdata.txt","r"))!=NULL)

flag2=0;

else

{

system("cls");

printf("没有信息,请你录入信息!\n");

}

}while(flag1&&flag2);

switch(choice)

{

case 1:

printf("\n==========请输入信息========\n");

input();

write();

printf("==========信息已存入档=========\n");

main();

case 2:

read();

write;

break;

case 3:

printf("==========输出信息===========\n");

if(flag1)

read();

output();

main();

case 4:

printf("===========查询信息==========\n");

if(flag1)

read();

chaxun();

main();

case 5:

printf("\n退出系统!谢谢使用!\n\n" ); exit(0);

default:

printf("输入错误!\n");

exit(0);

}}

  • 写回答

1条回答 默认 最新

  • CSDN专家-sinJack 2021-06-23 17:52
    关注

    你录入信息之后,应该直接跳出循环了,执行了下一次循环。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月26日
  • 已采纳回答 12月18日

悬赏问题

  • ¥60 pb数据库修改或者求完整pb库存系统,需为pb自带数据库
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路