m0_61138145 2022-05-22 10:10 采纳率: 88.2%
浏览 82
已结题

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++不是太理解,为什么这样输入会出错

  • 写回答

3条回答 默认 最新

  • 关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月30日
  • 已采纳回答 5月22日
  • 创建了问题 5月22日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来