喵宅苑 MewoGarden × 技术宅社区II | Z站 Z Station 棒棒哒纯文字二次元技术社区

正文

编译没有错,运行强制停止,什么问题?

作者:矛盾
[i=s] 本帖最后由 绯色の胖子 于 2015-6-12 18:10 编辑 大神们,这个程序编译没有错,运行强制停止,什么问题?运行的时候 点5 就是 添加后报道的学生 只要是添加 就出错停止运行 #include <stdlib.h> #include <stdio.h> #include <math.h> #include <conio.h> #include <string.h> #define SIZE 7 struct student {char num[20]; char name[10]; char time; }std[SIZE]; void menu(); void dianming(); void absent(); void add(); void save(); void main() { int i,k; FILE *fp; if((fp=fopen("e:\\file20.txt","r"))==NULL) { printf("文件打开失败\n"); exit(0); } for(i=0;i<SIZE;i++) fscanf(fp,"%s %s %c",std.num,std.name,&std.time); printf("**************************************************************************\n"); printf("**************************************************************************\n"); printf("****************************欢迎使用上课随机点名程序**********************\n"); printf("****** 输入1:显示所有同学点名情况 *********\n"); printf("****** 输入2:开始点名 *********\n"); printf("****** 输入3:更新文件 *********\n"); printf("****** 输入4:缺席同学的情况 *********\n"); printf("****** 输入5:添加后报道学生信息 *********\n"); printf("****** 输入6: 退出 *********\n"); printf("**************************************************************************\n"); while(1) {printf("please choose "); scanf("%d",&k); switch(k) { case 1: printf("number name Y or N\n"); for(i=0;i<SIZE;i++) printf(" %s %s %c\n",std.num,std.name,std.time); break; case 2: dianming(); break; case 3: save(); printf("****************************文件更新成功!退出请按5**************************\n"); break; case 4: absent(); break; case 5: /*添加学生信息*/add(); break; case 6: exit(0); } fclose(fp); } } void add() { FILE *fp; int n,i; struct student stu; if((fp=fopen("e:\\file20.txt","a"))==NULL) { printf("文件打开失败\n"); exit(0); } else //如果文件已经存在,可以追加学生信息 {printf("请输入要添加的学生数量,按回车键确认:"); scanf("%d",&n); for(i=1;i<=n;i++) { printf("\n请输入第%d个学生的学号 姓名 缺席情况,用空格分开,并按回车键确认:\n",i); scanf("%s%s",stu.num,stu.name); fprintf(fp,"%s %s %s\n",stu.num,stu.name,stu.time); } } fclose(fp); } void dianming() {int n,j,m; printf("请输入数量:"); scanf("%d",&n); j=rand()%7;/*调用rand函数进行点名*/ for(j=0;j<n;j++) { printf(" %s %s ",std[j].num,std[j].name); printf("缺席请按1否则请按2:"); scanf("%d",&m); if(m==1) std[j].time='Y'; else if(m==2) printf("没有缺席");} } void absent() {int i; for(i=0;i<SIZE;i++) if(std.time!='N') printf(" %s %s %c\n",std.num,std.name,std.time); } void save() {int i; FILE *fp; if((fp=fopen("e:\\file20.txt","w+"))==NULL) {printf("文件打开失败\n"); exit(0);} for(i=0;i<SIZE;i++) {fprintf(fp,"%s %s %c\n",std.num,std.name,std.time); }}

回复

编译没问题不一定就是

作者:bai200255
编译没问题不一定就是ok的,闪退应该是运行时问题 大致看了一下,没细想,你可以考虑:是不是程序瞬间执行完毕,while部分没有停顿、是不是读或写文件错了导致程序错误…… 你可以一部分一部分的输出一些调试信息,
查看回复

麻烦你能把这个程序的具体要求写出来吗

作者:张全蛋
那啥,麻烦你能把这个程序的具体要求写出来吗?你的代码我改了几次,感觉效果不是很理想,特别是你在读取文件内容到内存中,却使用数组这种定长的数据结构来存放,因为文件内容如果没有事先设计好,程序怎么能知道应该读取几条数据?而且你既然包含了添加信息的功能,那么文件的内容也就是可变的,更不应该使用固定长度的方式,换成链表才更实际点。麻烦你直接说一下这个程序要实现的各种功能,以及你那个记录学生的编号,姓名,以及缺席记录的文件内容是按什么格式组织的,直接用文字说一下吧。你贴了代码我反而不好改了,代码的风格太乱,适当把函数声明,和函数的实现分别拆开放在头文件,源文件中,不要这样直接在主函数文件里面堆叠。
查看回复
上一页
下一页
0%
站点地图友情链接:
喵宅苑
喵空间社区程序
喵宅苑 静态版
宅喵RPG地图编辑器
络合兔
Lanzainc
技术宅
小五四博客
莉可POI
Mithril.js
枫の主题社
Project1
午后少年
机智库
七濑胡桃
xiuno
幻想の日常
魂研社
Nothentai
0xffff
欲望之花
泽泽社长
淀粉月刊
HAYOU