[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); }}