无报错警告的程序在VC上不能完全运行完,在Dev C++上不能运行

qq_42565832 2018-06-28 12:37:01
一段关于学生信息系统的代码,要实现学生基本信息输入、输出、插入、删除、排序、查询、数据保存及打开功能。
在VC 6.0上基本所有功能都能运行,唯独一运行删除信息的功能就显示:程序停止运行;
在Dev C++上直接无法运行。
在VC 6.0和Dev C++上都不报错。
附上代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN sizeof(struct student)
struct student
{
char NO[20];
char name[20];
int age;
char sex[3];
char birthday[10];
char address[30];
char phone[20];
char e_mail[20];
struct student *next;
};
typedef struct student STU;
STU*head = NULL;
int n, i = 0;

void show_menu(); //显示菜单
void menu(); //执行菜单
void creat_stu(); //建立链表
void insert_stu(); //学生信息录入
void print_stu(); //学生信息浏览
void search_NO(); //以学号方式查询信息
void search_name(); //以姓名方式查询信息
void arrage_stu(); //排序
void del_stu(); //删除学生信息
void revise_stu(); //修改学生信息
void save(); //保存信息
int main()
{
system("color 03");
creat_stu();
menu();
return 0; // quiets vc++
}

void creat_stu()
{
FILE *fp;
long size;
STU *p1, *p2;
head = (STU*)malloc(sizeof(STU));
head->next = NULL;
if ((fp = fopen("fname.txt", "r")) == NULL)
{
printf("这是新表\n");
return;
}
fseek(fp, 0L, 2);
size = ftell(fp);
{
printf("这是空表\n");
return;
}
rewind(fp);
p2 = head->next;
while (!feof(fp))
{
p1 = (STU*)malloc(sizeof(STU));
fscanf(fp, "%s %s %d %s %s %s %s %s\n", p1->NO, p1->name, &p1->age, p1->sex, p1->birthday, p1->address, p1->phone, p1->e_mail);
p1->next = NULL;

if (head->next == NULL)
head->next = p1;
else
p2->next = p1;
p2 = p1;
n++;
}
p2->next = NULL;
fclose(fp);
}

void menu()
{
int c;
show_menu();
while (1)
{
scanf("%d", &c);
switch (c)
{
getchar();
case 1:system("cls");insert_stu(); break;
case 2:system("cls");print_stu(); break;
case 3:system("cls");search_NO(); break;
case 4:system("cls");search_name(); break;
case 5:system("cls");del_stu(); break;
case 6:system("cls");revise_stu(); break;
case 7:system("cls");arrage_stu(); break;
case 0:system("cls");exit(0);
}
show_menu();
}
}

void show_menu()
{
printf("\n");
printf("\n-------------------------菜单------------------------\n");
printf("\t\t 1.输 入 学 生 信 息 \n");
printf("\n-----------------------------------------------------\n");
printf("\t\t 2.浏 览 学 生 信 息 \n");
printf("\n-----------------------------------------------------\n");
printf("\t\t 3.以学号方式查询信息 \n");
printf("\n-----------------------------------------------------\n");
printf("\t\t 4.以姓名方式查询信息 \n");
printf("\n-----------------------------------------------------\n");
printf("\t\t 5.删 除 学 生 信 息 \n");
printf("\n-----------------------------------------------------\n");
printf("\t\t 6.修 改 学 生 信 息 \n");
printf("\n-----------------------------------------------------\n");
printf("\t\t 7.排 序 \n");
printf("\n-----------------------------------------------------\n");
printf("\t\t 0.退 出 \n");
printf("\n-----------------------------------------------------\n");
printf("\n请选择功能\n");
}

void insert_stu() //输入学生信息
{
n = 0;
STU*p1 = NULL, *p2 = NULL;
p1 = (STU*)malloc(sizeof(STU));
printf("\n---------------------录入学生信息--------------------\n");
printf("\t\t输入学生学号:\t");
scanf("%s", p1->NO);
printf("\n-----------------------------------------------------\n");
printf("\t\t输入学生姓名:\t");
scanf("%s", &(p1->name));
printf("\n-----------------------------------------------------\n");
printf("\t\t输入学生学年龄:\t");
scanf("%d", &(p1->age));
printf("\n-----------------------------------------------------\n");
printf("\t\t输入学生性别:\t");
scanf("%s", p1->sex);
printf("\n-----------------------------------------------------\n");
printf("\t\t输入学生出生年月:\t");
scanf("%s", p1->birthday);
printf("\n-----------------------------------------------------\n");
printf("\t\t输入学生地址:\t");
scanf("%s", p1->address);
printf("\n-----------------------------------------------------\n");
printf("\t\t输入学生电话:\t");
scanf("%s", p1->phone);
printf("\n-----------------------------------------------------\n");
printf("\t\t输入学生E_mail:\t");
scanf("%s", p1->e_mail);
n++;
if (head->next == NULL)
{
head = (STU*)malloc(LEN);
head->next = p1;
}
else
{
for (p2 = head; p2->next != NULL; p2 = p2->next);
p2->next = p1;
}
p1->next = NULL;
save();//svae()改为save()
}

void print_stu() //输出学生信息
{
STU*p = NULL;
if (head == NULL)
{
printf("文档中无记录!\n");
return;
}
for (p = head->next; p != NULL; p = p->next)
{
printf("----------------------学生信息浏览-------------------\n");
printf("\t\t学生学号:\t%s\n", p->NO);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生年龄:\t%d\n", p->age);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生性别:\t%s\n", p->sex);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生出生年月:\t%s\n", p->birthday);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生地址:\t%s\n", p->address);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生学电话:\t%s\n", p->phone);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生E_mail:\t%s\n", p->e_mail);
printf("\n");
}
}

void search_name() //查询名字
{
STU*p = NULL;
char name[20];
if (head == NULL)
{
printf("文档中无记录!\n");
return;
}
printf("输入学生姓名:");
scanf("%s", name);
for (p = head->next; p != NULL; p = p->next)
{
if (!strcmp(p->name, name))
{
printf("-------------------你要查找的学生是------------------\n");
printf("\t\t学生学号:\t%s\n", p->NO);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生姓名:\t%s\n", p->name);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生年龄:\t%d\n", p->age);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生性别:\t%s\n", p->sex);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生出生年月:\t%s\n", p->birthday);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生地址:\t%s\n", p->address);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生电话:\t%s\n", p->phone);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生E_mail:\t%s\n", p->e_mail);
printf("\n");
i = 1;
}
}

if (!i)
{
printf("无该学生信息!");
}
}

void search_NO() //查询学号
{
STU * p= NULL;
char NO[20];
if (head == NULL)
{
printf("文档中无记录!\n");
return;
}
printf("请输入学生学号:");
scanf("%s", NO);
for (p = head->next; p != NULL; p = p->next)
{
if (!strcmp(p->NO, NO))
{
printf("-------------------你要找的学生是-------------------\n");
printf("\t\t学生学号:\t%s\n", p->NO);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生姓名:\t%s\n", p->name);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生年龄:\t%d\n", p->age);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生性别:\t%s\n", p->sex);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生出生年月:\t%s\n", p->birthday);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生地址:\t%s\n", p->address);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生电话:\t%s\n", p->phone);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生E_mail:\t%s\n", p->e_mail);
printf("\n");
i = 1;
}
}
if (!i)
{
printf("无该学生信息!");
}
}

void revise_stu() //修改信息
{
STU* p = NULL;
if (head == NULL)
{
printf("文档中无记录!\n");
return;
}
char NO[20];
printf("请输入学生学号:\t");
scanf("%s", NO);
for (p = head->next; p != NULL; p = p->next)
{
if (!strcmp(p->NO, NO))
{
printf("--------------------你要修改学生是-------------------\n");
printf("\t\t学生学号:\t%s\n", p->NO);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生姓名:\t%s\n", p->name);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生年龄:\t%d\n", p->age);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生性别:\t%s\n", p->sex);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生出生年月:\t%s\n", p->birthday);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生地址:\t%s\n", p->address);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生电话:\t%s\n", p->phone);
printf("\n-----------------------------------------------------\n");
printf("\t\t学生E_mail:\t%s\n", p->e_mail);
printf("\n");
i = 1;
printf("-----------------修改学号为%s的学生----------------\n", NO);
strcpy(p->NO, NO);
printf("\t\t输入修改学生姓名:\t");
scanf("%s", p->name);
printf(
...全文
156 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-06-28
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止

69,371

社区成员

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

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