C++输入字符串后直接退出程序是什么原因


#include <string>
#include <iostream>
#include <algorithm>
using namespace std;

//学生:学号,姓名,性别,年龄,班级

//功能:输入,查询(按姓名),修改数据,浏览数据,删除数据,退出程序

struct Student {
    char *id;
    char *name;
    char *gender;
    int age;
    char *Class;
} a[100];

void shuru();
void chaxun();
void xiugai();
void liulan();
void shanchu();
void tuichu();
int k = 0;    //对象索引
char *n[100];    //名字索引

int main() {
    cout << "欢迎使用学生信息管理系统 ^_^" << endl;
    cout << "请选择您要使用的业务:\n\
    1.增加新同学的信息。\n\
    2.按姓名查询某位同学的信息。\n\
    3.修改某位同学的信息。\n\
    4.浏览全部同学的信息。\n\
    5.删除老同学的信息。" << endl;
    int x;
    while (1) {
        cin >> x;
        switch (x) {
            case 1:
                shuru();
                break;
            case 2:
                chaxun();
                break;
            case 3:
                xiugai();
                break;
            case 4:
                liulan();
                break;
            case 5:
//                shanchu();
                break;
            case 6:
                tuichu();
                break;
        }
    }

    return 0;
}

void shuru() {
    cout << "请输入新同学的学号" << endl;
    cin >> a[k].id;
    cout << "请输入新同学的姓名" << endl;
    cin >> a[k].name;
    n[k] = a[k].name;
    cout << "请输入新同学的性别" << endl;
    cin >> a[k].gender;
    cout << "请输入新同学的年龄" << endl;
    cin >> a[k].age;
    cout << "请输入新同学的班级" << endl;
    cin >> a[k].Class;
    k++;
}

void chaxun() {
    int judge = 0;
    cout << "请输入所要查询的同学的姓名" << endl;
    char *name;
    cin >> name;
    //查找名单里是否有姓名为name的同学(没有了报错)
    for (int i = 0; i < 100; i++) {
        if (strcmp(n[i], name)) {
            //找到了就输出name同学的个人信息
            cout << "学号:" << a[i].id << endl;
            cout << "姓名:" << a[i].name << endl;
            cout << "性别:" << a[i].gender << endl;
            cout << "年龄:" << a[i].age << endl;
            cout << "班级:" << a[i].Class << endl;
            judge++;
            break;
        }
    }
    if (!judge)
        cout << "找不到该同学" << endl;
}

void xiugai() {
    int judge = 0;
    cout << "请输入所要修改的同学的姓名" << endl;
    char *name;
    cin >> name;
    //查找文件里是否有姓名为name的同学(没有了报错)
    for (int i = 0; i < 100; i++) {
        if (strcmp(n[i], name)) {
            cout << "请输入该同学修改后的信息:" << endl;
            cout << "请输入该同学的学号" << endl;
            cin >> a[i].id;
            cout << "请输入该同学的姓名" << endl;
            cin >> a[i].name;
            cout << "请输入该同学的性别" << endl;
            cin >> a[i].gender;
            cout << "请输入该同学的年龄" << endl;
            cin >> a[i].age;
            cout << "请输入该同学的班级" << endl;
            cin >> a[i].Class;
            cout << "修改完成" << endl;
            judge++;
            break;
        }
    }
    if (!judge) {
        cout << "找不到该同学" << endl;
    }
}

void liulan() {
    int num = strlen(*n);
    cout << "找不到同学" << endl;
    for (int i = 0; i < num; i++) {
        cout << "学生" << i << ":" << endl;
        cout << "学号:" << a[i].id << endl;
        cout << "姓名:" << a[i].name << endl;
        cout << "性别:" << a[i].gender << endl;
        cout << "年龄:" << a[i].age << endl;
        cout << "班级:" << a[i].Class << endl;
        cout << endl;
    }
}

void shanchu() {
    cout << "请输入所要删除的同学的姓名" << endl;
    char name;
    cin >> name;
    //读取文件内容

    //查找文件里是否有姓名为name的同学(没有了报错)

    //找到了就删除该同学的信息
}

void tuichu() {
    exit(0);
}

对C++不是太理解,为什么这样输入会出错

你结构体中
char *id;
是指针
指针没有初始化分配空间,指针初始指向的是随机的野地址,对野地址写入内容会出问题
应该改成 char id[100];

在输入数字之前加上cin.ignore()函数,具体可以参考:
https://blog.csdn.net/wxbmelisky/article/details/48596881

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632