【发布时间】:2019-11-22 13:52:32
【问题描述】:
我不熟悉编程和基本的学生管理系统。系统首先要求用户输入数据。 6件事; id、姓名、大学、系、学期和 gpa。数据输入工作正常。数据输入完成后,会出现一个包含三个选项的菜单。一种是创建一个新的学生档案。在这种情况下,当用户输入学生姓名时,程序会突然终止。我在每一个有意义的地方都使用了 cin.ignore,但同样的问题也发生了。任何帮助,将不胜感激。谢谢你。代码如下。 注意:我不允许使用结构和/或向量。
#include<iostream>
#include<string>
using namespace std;
int main()
{
cout<<"------------------------------------- Welcome to student management system! ----------------------------------------------"<<endl;
cout<<"------------------------------------------------DATA INPUT----------------------------------------------"<<endl;
cout<<"Enter the number of students you want to enroll: ";
int size;
int n=0;
int counter=0;
cin>>size;
int *student_ids=new int[size];
int *semester=new int[size];
float *cgpa=new float[size];
string *names=new string[size];
string *uni=new string[size];
string *dept=new string[size];
int *ptr_id,*ptr_semester;
string *ptr_names,*ptr_uni,*ptr_dept;
float *ptr_cgpa;
cout<<"Enter their ids: "<<endl;
ptr_id=student_ids;
for(int i=0;i<size;i++)
{
cin>>*ptr_id;
ptr_id++;
}
ptr_names=names;
cout<<"Enter their names: "<<endl;
cin.ignore();
for(int i=0;i<size;i++)
{
getline(cin,*ptr_names);
ptr_names++;
}
ptr_uni=uni;
cout<<"Enter their Universities: "<<endl;
for(int i=0;i<size;i++)
{
getline(cin,*ptr_uni);
ptr_uni++;
}
ptr_dept=dept;
cout<<"Enter their departments: "<<endl;
for(int i=0;i<size;i++)
{
getline(cin,*ptr_dept);
ptr_dept++;
}
ptr_semester=semester;
cout<<"Enter their semester: "<<endl;
for(int i=0;i<size;i++)
{
cin>>*ptr_semester;
ptr_semester++;
}
ptr_cgpa=cgpa;
cout<<"Enter the GPA: "<<endl;
for(int i=0;i<size;i++)
{
cin>>*ptr_cgpa;
ptr_cgpa++;
}
cout<<"-----------------------------------------------DATA INPUT COMPLETE----------------------------------------------------------- "<<endl;
int choice;
char again='y';
while(again=='y'||again=='Y')
{
cout<<"Press 1 to Create a Student Profile"<<endl;
cout<<"Press 2 to Search a Student"<<endl;
cout<<"Press 3 to Delete a Student record"<<endl;
cin>>choice;
switch(choice)
{
case 1: //CREATING STUDENT PROFILE
cout<<"Enter the number of profiles you want to create: ";
cin>>n;
cout<<"Enter ID(s): ";
for(int i=size;i<size+n;i++)
{
cin>>*ptr_id;
ptr_id++;
}
cout<<student_ids[1];
cout<<student_ids[0];
cout<<"Enter name(s): ";
cin.ignore();
for(int i=size;i<size+n;i++)
{
getline(cin,*ptr_names);
cin.ignore();
ptr_names++;
}
cout<<names[1]<<endl;
cout<<"Enter University: ";
for(int i=size;i<size+n;i++)
{
getline(cin,*ptr_uni);
ptr_uni++;
}
cout<<"Enter Department(s): ";
for(int i=size;i<size+n;i++)
{
getline(cin,*ptr_dept);
ptr_dept++;
}
cout<<dept[2]<<endl;
cout<<"Enter semester(s): ";
for(int i=size;i<size+n;i++)
{
cin>>*ptr_semester;
ptr_semester++;
}
cout<<"Enter CGPA: ";
for(int i=size;i<size+n;i++)
{
cin>>*ptr_cgpa;
ptr_cgpa++;
}
cout<<"------------------------------------------------SUCCESS-------------------------------------------------------------";
cout<<endl;
break;
case 2: //SEARCHING
int searching_method;
cout<<"Press 1 to search by ID."<<endl;
cout<<"Press 2 to list all students."<<endl;
cin>>searching_method;
switch(searching_method)
{
case 1: //SEARCHING BY ID
cout<<"Enter the student ID: ";
int search;
cin>>search;
for(int i=0;i<size+n;i++)
{
if(student_ids[i]==search)
{
counter++;
cout<<"Name: "<<names[i]<<endl;
cout<<"University: "<<uni[i]<<endl;
cout<<"Department: "<<dept[i]<<endl;
cout<<"Semester: "<<semester[i]<<endl;
cout<<"CGPA: "<<cgpa[i]<<endl;
break;
}
}
if(counter==0)
{
cout<<"No student found!"<<endl;
}
break;
case 2: //LIST OF ALL STUDENTS
for(int i=0;i<size+n;i++)
{
cout<<"Student ID: "<<student_ids[i]<<endl;
cout<<"Name: "<<names[i]<<endl;
cout<<"University: "<<uni[i]<<endl;
cout<<"Department: "<<dept[i]<<endl;
cout<<"Semester: "<<semester[i]<<endl;
cout<<"CGPA: "<<cgpa[i]<<endl;
cout<<endl;
cout<<endl;
}
break;
}
//case 3: //DELETEING A STUDENT ID
}
}
system("pause");
return 0;
}
【问题讨论】:
-
指针
ptr_names指向什么?首先,为什么需要指针? -
请尝试学习如何创建minimal reproducible example,重点是最小部分。
-
这个例子我就不看了,举个小例子吧。
-
@AlgirdasPreidžius 指向字符串 *names=new string[size];
-
请了解结构和类和vectors。而不是指针和指针算术和取消引用,而是使用数组索引,例如
student_ids[i].
标签: c++ pointers segmentation-fault getline