编译无错可一运行就出问题是什么原因?

lwlyjt 2016-12-16 04:44:02

#include "stdio.h"
#include "string.h"
#include "conio.h"
int N=0;
struct stu
{
int xh; /*学号*/
char name[10]; /*姓名*/
double yy; /*英语*/
double mat; /*数学*/
double jsj; /*计算机*/
double wl; /*物理*/
double zf; /*总分*/
}s[20];
void Re_file()
{
FILE *fp;
fp=fopen("bjcjk.txt","r");
while( fscanf(fp,"%d\n%s\n%lf\n%lf\n%lf\n%lf\n%lf\n",
&s[N].xh,s[N].name,&s[N].yy,&s[N].mat,&s[N].jsj,&s[N].wl,&s[N].zf)!=EOF)
N++;
fclose(fp);
}
void Wr_file()
{
int i;
FILE *fp;
fp=fopen("nwejck.txt","w");
for(i=0;i<N;i++)
fprintf(fp,"%d\n%s\n%lf\n%lf\n%lf\n%lf\n%lf\n",
s[i].xh,s[i].name,s[i].yy,s[i].mat,s[i].jsj,s[i].wl,s[i].zf);
fclose(fp);
}
void Js() /*计算总分*/
{
int i;
for(i=0;i<N;i++)
s[i].zf=s[i].yy+s[i].mat+s[i].jsj+s[i].wl;
}
void Sort() /*排序模块*/
{
int j,k;
double ave[20],t;
struct stu m;
Js();
for(k=0;k<N;k++)
ave[k]=s[k].zf/4; /*计算平均分*/
for(k=0;k<N-1;k++)
for(j=k+1;j<N;j++)
if(ave[k]<ave[j])
{
t=ave[k];ave[k]=ave[j];ave[j]=t; /*对平均分排序*/
m=s[k];s[k]=s[j];s[j]=m;
} /*按平均分整体排序*/
} void Disp() /*显示模块*/
{
int i;
printf("******************************************************************************\n");
printf("学号 姓名 英语 数学 计算机 物理 总分");
printf("******************************************************************************\n");
Js();
for(i=0;i<N;i++)
printf("%-13d %-10s %-3lf %-4lf% -11lf% -11lf %-13lf",
s[i].xh,s[i].name,s[i].yy,s[i].mat,s[i].jsj,s[i].wl,s[i].zf);
getchar();
}
void Total() /*统计模块*/
{
double yyzf=0,yypj,wlzf=0,wlpj,matzf=0,matpj,jsjzf=0,jsjpj;
int i,j=0,n,o;
printf("===============================\n");
printf(" 请问你想看哪一门课的成绩?? \n");
printf("===============================\n");
printf("\t1.英语\t2.数学\t3.计算机\t4.物理\n:");
printf("\t\t\t\t\t");
scanf("%d",&n);
switch(n)
{
case 1:
{
printf("===============================================================================\n");
printf("学号 姓名 英语 数学 计算机 物理 总分\n");
printf("===============================================================================\n");
for(i=0;i<N;i++)
yyzf+=s[i].yy;
yypj=yyzf/i;
for(i=0;i<N;i++)
{
if(s[i].yy >=yypj)
{
j++;
printf("%d %s %f %f %f %f %f\n",
s[i].xh ,s[i].name ,s[i].yy ,s[i].mat ,s[i].jsj ,s[i].wl, s[i].zf);
}
}
printf("英语平均分=%f\t\t超过平均的人数为%d个\n",yypj,j);
getchar();break;
}
case 2:
{
printf("===============================================================================\n");
printf("学号 姓名 英语 数学 计算机 物理 总分\n");
printf("===============================================================================\n");
for(i=0;i<N;i++)
matzf+=s[i].mat ;
matpj=matzf/i;
for(i=0;i<N;i++)
{
if(s[i].mat >=matpj)
{
j++;
printf("%d %s %f %f %f %f %f\n",
s[i].xh ,s[i].name ,s[i].yy ,s[i].mat ,s[i].jsj ,s[i].wl, s[i].zf);
}
}
printf("==============================================================\n");
printf(" 数学平均分=%f\t超过平均的人数为%d个\n",matpj,j);
printf("==============================================================\n");
getchar();break;
}
case 3:
{
printf("===============================================================================\n");
printf("学号 姓名 英语 数学 计算机 物理 总分\n");
printf("===============================================================================\n");
for(i=0;i<N;i++)
jsjzf+=s[i].yy;
jsjpj=jsjzf/i;
for(i=0;i<N;i++)
{
if(s[i].jsj >=jsjpj)
{
j++;
printf("%d %s %f %f %f %f %f\n",
s[i].xh ,s[i].name ,s[i].yy ,s[i].mat ,s[i].jsj ,s[i].wl, s[i].zf);
}
}
printf("计算机平均分=%f\t超过平均分的人数为%d个\n",jsjpj,j);
getchar();break;
}
case 4:
{
printf("===============================================================================\n");
printf("学号 姓名 英语 数学 计算机 物理 总分\n");
printf("===============================================================================\n");
for(i=0;i<N;i++)
wlzf+=s[i].wl;
wlpj=wlzf/i;
for(i=0;i<N;i++)
{
if(s[i].wl >=wlpj)
{
j++;
printf("%d %s %f %f %f %f %f\n",
s[i].xh ,s[i].name ,s[i].yy ,s[i].mat ,s[i].jsj ,s[i].wl, s[i].zf);
}
}
printf("物理平均分=%f\t超过平均分的人数为%d个\n",wlpj,j);
getchar();break;
}
}
printf("要显示每一科的平均分吗??\t1、是\t2、否\n");
scanf("%d",&o); if(o==1)
{
yyzf=0;yypj=0;wlzf=0;wlpj=0;matzf=0;matpj=0;jsjzf=0;jsjpj=0;
for(i=0;i<N;i++)
wlzf+=s[i].wl;
wlpj=wlzf/(N-1);
for(i=0;i<N;i++)
jsjzf+=s[i].yy;
jsjpj=jsjzf/(N-1);
for(i=0;i<N;i++)
matzf+=s[i].mat ;
matpj=matzf/(N-1);
for(i=0;i<N;i++)
yyzf+=s[i].yy;
yypj=yyzf/(N-1);
printf("课程\t\t平均分\n");
printf("英语\t\t%f\n",yypj);
printf("数学\t\t%f\n",matpj);
printf("计算机\t\t%f\n",jsjpj);
printf("物理\t\t%f\n",wlpj);
}
}

...全文
109 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2016-12-16
  • 打赏
  • 举报
回复
估计你文件没有打开成功,fopen后先检查文件是否打开成功
小灸舞 版主 2016-12-16
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
lwlyjt 2016-12-16
  • 打赏
  • 举报
回复
void Appe() /*追加模块*/ { int n,i; printf(" *******************\n"); printf(" 请输入要追加的条数 n= ? \n"); printf(" *******************\n"); scanf("%d",&n); printf(" *************************\n"); printf(" 请输入所追加的学生信息 \n"); printf(" *************************\n"); printf("*********************************************************************\n"); printf(" 学号 名字 英语 数学 计算机 物理 总分\n"); printf("**********************************************************************\n"); for(i=0;i<n;i++) { scanf("%d%s%lf%lf%lf%lf%lf", &s[N].xh,s[N].name,&s[N].yy,&s[N].mat,&s[N].jsj,&s[N].wl,&s[N].zf); N++; } } void Modi() /*修改模块*/ { int x,m,n,k=0,i,j; char st[20]; printf("=======================================\n"); printf("== 1.学号 ==\n"); printf("== 2.名字 ==\n"); printf("=====================================\n"); scanf("%d",&m); if(m==1) { printf("=====================================\n"); printf(" 请输入 学号 \n"); printf("======================================="); scanf("%d",&n); for(i=0;i<N;i++) if(n==s[i].xh) { k=1;j=i; } } else if(m==2) { printf("=====================================\n"); printf(" 请输入 名字 \n"); printf("======================================\n"); scanf("%s",st); for(i=0;i<N;i++) if(!strcmp(s[i].name,st)) { k=1;j=i; } } if(k==1) { printf("*********************************************************************\n"); printf(" 请问要修改哪项? 1:英语 2:数学 3:计算机 4:物理 \n"); printf("**********************************************************************\n"); scanf("%d",&x); switch(x) { case 1:scanf("%lf",&s[j].yy); break; case 2:scanf("%lf",&s[j].mat); break; case 3:scanf("%lf",&s[j].jsj); break; case 4:scanf("%lf",&s[j].wl); break; } } else { printf("===========================\n"); printf(" 出现错误 *\n"); printf("============================\n"); } } void Dele() /*删除模块*/ { int m,n,k=0,j,i; char str[20]; printf(" ===============================\n"); printf(" = 1.按学号删 =\n"); printf(" = 2.按姓名删 =\n"); printf(" ===============================\n"); scanf("%d",&m); if(m==1) { printf(" ===============================\n"); printf(" = 请输入学号! =\n"); printf(" ===============================\n"); scanf("%d",&n); for(i=0;i<N;i++) if(n==s[i].xh) { k=1;j=i; } } else if(m==2) { printf(" ===============================\n"); printf(" == 请输入名字! ===\n"); printf(" ===============================\n"); scanf("%s",str); for(i=0;i<N;i++) if(!strcmp(s[i].name,str)) { k=1;j=i; } } if(k==1) { for(i=j;i<N-1;i++) s[i]=s[i+1]; N--; } else { printf("=============================\n"); printf(" 没有要删除的此人 *\n"); printf("============================\n"); } } void Query() /*查询模块*/ { int n,num,i,k,j; char xm[10]; printf("1、按学号查询 2、按姓名查询\t"); printf("\n请输入你的选择:\t"); scanf("%d",&n); if(n==1) { printf("\n请输入学号:"); scanf("%d",&num); for(i=0;i<N;i++) if(num==s[i].xh) { k=1; j=i; } } else if(n==2) { printf("请输入姓名:"); scanf("%s",xm); for(i=0;i<N;i++) if(strcmp(s[i].name,xm)==0) { k=1; j=i; } } if (k==1) { printf("学号 姓名 英语 数学 计算机 物理 总分\n"); printf("===============================================================================\n"); printf("%d %s %f %f %f %f %f\n", s[j].xh ,s[j].name ,s[j].yy ,s[j].mat ,s[j].jsj ,s[j].wl, s[j].zf); printf("===============================================================================\n"); } else printf("没有所查询的人"); getchar(); } void Quit() /*退出*/ { printf(" ****** Thank you bye ****** \n"); printf("\t***************************************************************\n"); printf("\n"); printf("\t* 谢谢使用学生成绩管理系统 *\n"); printf("\n"); printf("\t* *\n"); printf("\n"); printf("\t* 钟一文(制作) *\n"); printf("\n"); printf("\t* 学号:201101040232 *\n"); printf("\n"); printf("\t_________________ 如有疑问,请致电13047237362 ___________\n"); printf("\t***************************************************************\n"); printf("\n"); printf("\t 2012年06月26日\n"); } void main() { int sele; Re_file(); sele=1; while(sele) { printf("\n\n"); printf(" ***欢迎使用学生成绩管理系统***\n"); printf(" ****************************\n"); printf(" * *\n"); printf(" * 1:显示 2:追加 *\n"); printf(" * *\n"); printf(" * 3:修改 4:删除 *\n"); printf(" * *\n"); printf(" * 5:查询 6:排序 *\n"); printf(" * *\n"); printf(" * 7:统计 8.退出 *\n"); printf(" * *\n"); printf(" ****************************\n"); printf("\n\n请输入你的选择: "); scanf("%d",&sele); switch(sele) { case 1:Disp();break; case 2:Appe();Disp();break; case 3:Modi();Disp();break; case 4:Dele();Disp();break; case 5:Query();break; case 6:Sort();Disp(); break; case 7:Total(); break; case 8:Quit(); sele=0;break; } printf("\n\nPress any key to continue\n"); getchar(); } Wr_file(); }

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧