指针-求助 输入时程序崩溃 改了N小时还是问题不断

问题描述

求助 输入时程序崩溃 改了N小时还是问题不断

学生信息管理

学生信息管理应用程序要求能够对学生的信息: StudentID, Name, Sex, Age, Time of Enrollment(入学时间), Gpa(加权平均), PhoneNo, MailingAddress, 等进行管理。

功能要求:
(1)Create a student list;
(2)Sort according to the StudentID;
(3)Insert a student;//(to the sorted array or the sorted linked list )
(4)Delete a student;
(5)Update a student Info;.
(6)Search a student ;
(7)Display all students;
*(8)Save to the file; //选作
*(9)Open the file; //选作
(10)exit

设计要求:
(1)设计一个“Welcome Screen”,显示此应用程序的名称、设计人员的名字、设计时间、软件版本等信息;
(2)设计菜单界面,可以选择上述功能;
(3)每项功能完成后,返回菜单界面;
(4)用户可以退出;

#include
#include
#include
#include
#define LEN sizeof(Student)
#include

typedef struct SIS { //结构体的声明
long StudentID; //学号
char Name[20]; //姓名
char Sex[10];//性别
int Age[10];//年龄
int TOE[30] ;//Time of Enrollment入学日期
float GPA[15];//(加权平均)
int PhoneNo[100]; //电话号码
char MailingAddress[100];//邮箱
struct SIS *next;//指向下一个结构体的指针
} Student;

Student *head;

/////////////////////声明函数///////////////////////
void wellcome();//欢迎界面
void start();//开始界面
int menu();//菜单
int input();//输入/插入
int del();//删除
int search ();//查找
int ALL();//显示全部
///////////////////////////////////////////////////

void wellcome() { //欢迎界面
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );

printf("*************************************************n");
printf("*tt学生信息管理系统tt*n");
printf("*tttttt*n");
printf("*tttLAB 8ttt*n");
printf("*tttttt*n");
printf("*t            莱茵出品tt        *n");
printf("*tttttt*n");
printf("*tttt2.33.vert*n");
printf("*tttttt*n");
printf("*tttttt*n");
printf("*************************************************n");
printf("%s", asctime (timeinfo));
printf("Please Press Enter to continue……");

}

void start() { //开始界面
int a=0;
int b=0;
int A=15080121;
getchar();
system("cls");
printf("nnn");
printf("tt学生信息管理系统nnn");
printf("ttt2.33.Vernnn");
getchar();
system("cls");
/* printf("tt请输入用户名和密码,按下Enter继续nnn");
printf("tAdmin:");
scanf("%d",&a);
printf("n");
printf("tPassword:");
scanf("%d",&b);
if(a==A&&b==A) {
getchar();
system("cls");
} else {
printf("ttt您没有足够的权限!!!!!nPlease Press Enter to EXIT……");
getchar();
exit(0);
}*/
}

int menu() {//菜单
int shuru=0;
printf("nnn");
printf("tt (1)Create a student listn");
printf("tt (2)Insert a studentn");//(to the sorted array or the sorted linked list )
printf("tt (3)Delete a studentn");
printf("tt (4)Search a studentn");
printf("tt (5)Display all studentsn");
printf("tt (6)exitn");
printf("tt请选择功能:");
scanf("%d",&shuru);
return shuru;

}

int input() {//输入、插入
Student *p1,*p2;
Student *student;
char a = 'y';
head = p2 = p1 ;

system("cls");

student = (Student*) malloc (LEN);
printf("t请按照要求输入n");
while(a=='y'||a=='Y') {
    p2=p1=head;
    printf("tStudentID:");
    scanf("%d",student->StudentID);
    printf("t");
    printf("Name:");
    scanf("%s",student->Name);
    printf("t");
    printf("Sex:");
    scanf("%s",student->Sex);
    printf("t");
    printf("Age:");
    scanf("%d",student->Age);
    printf("t");
    printf("TOE:");
    scanf("%d",student->TOE);
    printf("t");
    printf("GPA:");
    scanf("%f",student->GPA);
    printf("t");
    printf("PhoneNo:");
    scanf("%d",student->PhoneNo);
    printf("t");
    printf("MailingAddress:");
    scanf("%s",student->MailingAddress);
    printf("nnnn");
    student->next=NULL;
    fflush(stdin);
    if(head==NULL)head=student;
    else {
        while(p1->StudentID<student->StudentID&&p1->next!=NULL) {
            p2=p1;
            p1=p1->next;
        }
        if(p1->StudentID>student->StudentID)
            if(p1==head) {
                student->next=head;
                head=student;
            } else {
                p2->next=student;
                student->next=p1;
            }
        else p1->next=student;
    }
    student = (Student *) malloc (LEN);
    printf("是否继续添加,输入'y'或'Y'继续n");
    a=getchar();
    fflush(stdin);
}
printf("ttt录入成功!n");
free(student);
return 0;

}

int del() { //删除学生信息
Student *p1,*p2;
Student *student;
int tage = 0;
long StudentID;

p1 = head;
system("cls");
if (head == NULL) {
    printf("tt无学生信息!!!nPlease Press Enter to Return……");

    return 0;
}
printf("tt请输入要删除的学生的学号: ");

while(p1!=NULL) {
    if(p1->StudentID==StudentID) {
        tage=1;
        if(p1==head)head=head->next;
        else p2->next=p1->next;
        free(p1);
        break;
    }
    p1=p2;
    p2=p2->next;
}
if(tage==0) {
    printf("ttt信息不存在!n");
}
tage=0;
printf("ttt成功删除息n");
fflush(stdin);

return 0;

}

int search () { //查询
Student *p1;
Student *student;
int tage = 0;
long StudentID;

system("cls");
printf("请输入要查询的学生学号:");
scanf("%d",&StudentID);
p1=head;
if(head==NULL) {
    printf("无学生信息!n");
    return 0;
} else
    while(p1!=NULL)
        if(p1->StudentID==StudentID) {
            tage=1;
            printf("你查找的学生信息如下:n");
            printf("ttStudentID:%dn",p1->StudentID);
            printf("ttName:%sn",p1->Name);
            printf("ttSex:%sn",p1->Sex);
            printf("ttAge:%dn",p1->Age);
            printf("ttTOE:%dn",p1->TOE);
            printf("ttGPA:%fn",p1->GPA);
            printf("ttPhonrNo:%dn",p1->PhoneNo);
            printf("ttMailingAddress:%sn/n/n",p1->MailingAddress);
            break;
        }

        else  p1=p1->next;
if(tage==0)printf("ttt无该学生信息!n");
tage=0;
fflush(stdin);

return 0;

}

int ALL() { //显示全部信息
Student *p1;
p1 = head;
system("cls");
if(head==NULL) {
printf("无学生信息!n");
return 0;
}
while(p1!=NULL) {
printf("ttStudentID:%dn",p1->StudentID);
printf("ttName:%sn",p1->Name);
printf("ttSex:%sn",p1->Sex);
printf("ttAge:%dn",p1->Age);
printf("ttTOE:%dn",p1->TOE);
printf("ttGPA:%fn",p1->GPA);
printf("ttPhonrNo:%dn",p1->PhoneNo);
printf("ttMailingAddress:%sn/n/n",p1->MailingAddress);
p1=p1->next;
}
return 0;
}

main() {
int choose;
int x=1;
head=NULL;

wellcome();
start();
while(x) {
    choose=menu();
    switch(choose) {
        case 1: {
            input();
            system("pause");
            printf("Please Press Enter to Return……");
            getchar();
            system("cls");
            break;
        }

        case 2: {
            input();
            system("pause");
            printf("Please Press Enter to Return……");
            getchar();
            system("cls");
            break;
        }

        case 3: {
            del();
            system("pause");
            printf("Please Press Enter to Return……");
            getchar();
            system("cls");
            break;
        }

        case 4: {
            search();
            system("pause");
            printf("Please Press Enter to Return……");
            getchar();
            system("cls");
            break;
        }

        case 5: {
            ALL();
            system("pause");
            printf("Please Press Enter to Return……");
            getchar();
            system("cls");
            break;
        }

        case 6: {
            exit(1);
        }

        default: {
            system("cls");
            printf("nnnttt无此功能nnnn");
            break;
        }
    }

}

}


解决方案

你的结构体定义就有错误,输入时注意格式要对应:
long 对应%ld
字符数组对应%s

 typedef struct SIS { //结构体的声明
    long StudentID; //学号
    char Name[20]; //姓名
    char Sex[10];//性别
    int Age;//年龄--------------年龄不应该定义int 数组
    char TOE[30] ;//Time of Enrollment入学日期 ---------------定义为字符数组更好些?
    float GPA[15];//(加权平均)----------------------这个也不该是数组吧?有15个?
    char PhoneNo[100]; //电话号码---------------------改为char
    char MailingAddress[100];//邮箱
    struct SIS *next;//指向下一个结构体的指针
} Student;
时间: 2024-09-11 08:51:15

指针-求助 输入时程序崩溃 改了N小时还是问题不断的相关文章

百度地图-android在子线程里读写文件里的经纬度并绘制轨迹,activity销毁时程序崩溃,特来求助!

问题描述 android在子线程里读写文件里的经纬度并绘制轨迹,activity销毁时程序崩溃,特来求助! public class DrawPathActivity extends BaseActivity { private MapView mMapView; private BaiduMap mBaiduMap; private static final int POINT_COUNT_PER_GROUP = 100; private LatLng startPoint; private

基础-双向动态链表存在学生信息!删除第一个学生信息时程序崩溃?

问题描述 双向动态链表存在学生信息!删除第一个学生信息时程序崩溃? //输入学生信息后,凡是删除第一个学生的信息程序都会崩溃?? #include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; #define LEN sizeof(struct Student) struct Student //完全可以把结构当成类,只是访问权限不一样 { long num;//学号 cha

using-输入10个整数,将其中最小的数与第一个数交换,把最大的数与最后一个数交换。用指针实现,但是程序崩溃了

问题描述 输入10个整数,将其中最小的数与第一个数交换,把最大的数与最后一个数交换.用指针实现,但是程序崩溃了 #include #include /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main() { int a[10],i, p, *q, *n; printf("请输入十个数n"); for

VC++ Release模式下执行Live555::Run函数时程序崩溃

问题描述 VC++ Release模式下执行Live555::Run函数时程序崩溃 在Debug模式下程序能够正常运行. 在Release模式下面程序运行到该行崩溃,且无法定位进去进一步debug. 基于Win10,VS2015开发. 具体崩溃前后画面如下.请求各位大侠给予指导意见. 解决方案 指针异常了,检查一下,你最后一个页面中的各个参数指针等

android-Android 长按EditText时程序崩溃(华为4.4的手机),是什么原因?

问题描述 Android 长按EditText时程序崩溃(华为4.4的手机),是什么原因? 2C 04-13 16:53:36.652 8880-8880/com.xiangchao.starspace W/System.err: android.content.res.Resources$NotFoundException: File res/drawable/abc_ic_menu_selectall_material.xml from drawable resource ID #0x7f0

android-fragment间跳转时程序崩溃

问题描述 fragment间跳转时程序崩溃 我在一个Activity中加载了三个fragment,每个fragment里有几张图片,从一个fragment跳转到另一个fragment时程序就没反应了,直接崩溃,但是如果把图片减少或者全部移除,跳转就完全没有问题,请问这个问题如何解决? public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layo

android-在数据库中省略符号和选择数据时程序崩溃

问题描述 在数据库中省略符号和选择数据时程序崩溃 我从 sqlite 数据库中选择数据.问题是当数据库中有省略符号,比如 "" I' m John "" ,当我选择数据时,程序就崩溃.当程序中没有省略符号,一切都运行正常.选择数据的函数: String query = ""SELECT * FROM "" + mainCollumn + "" WHERE used=0 "" + &quo

VC6.0打开文件以及向工程中添加文件时程序崩溃自动退出解决方法_C 语言

换了一台电脑,vc6.0程序中,点击打开文件以及向工程中添加文件时,程序竟然崩溃自动退出了. 不知什么原因,安装相同的vc程序,本本竟然出现此缘故.但是这个操作又是自己经常用到的,所以不得不解决. 与上一台电脑不同的是,此电脑是win7系统,而上一个则是xp系统.此电脑office是2010版本,而上一个则是WPS:于是乎,在网上查资料,来解决. 看到网上也有类似的问题,有的说是win7系统原因,有的说是office2007版本缘故,有的说是viso缘故.总之,这几种说法,我都符合.win7系统

c++-C++矩阵乘法-输入第二个矩阵数据后程序崩溃?

问题描述 C++矩阵乘法-输入第二个矩阵数据后程序崩溃? //初始化第二个矩阵的数据后程序崩溃了?为什么呢? #include using namespace std; int main() { a: int m,n,r,c; cout<<"请输入第一个矩阵的行与列"< cin>>m>>n; cout<<"请输入第二个矩阵的行与列"< cin>>r>>c; if(n!=r) { co