c++ 。我试图通过在开关内使用数组来获取用户输入,但是当我运行代码时它显示分段错误?
Posted
技术标签:
【中文标题】c++ 。我试图通过在开关内使用数组来获取用户输入,但是当我运行代码时它显示分段错误?【英文标题】:c++ . I'm trying to get user input by using array inside switch but when i run the code it's showing segmentation fault? 【发布时间】:2019-11-17 05:50:22 【问题描述】:当我选择 switch case 1 并输入详细信息时,它向我展示了!分段故障。我觉得这是因为数组输入。但是如何避免这种情况,或者无论如何要解决这个问题? 问题 - 根据上面的问题 1 和 2,修改程序,使其显示菜单 用户可以选择; 添加新学生 显示学生名单 添加新课程 提供展示课程 用户可以选择安全退出/终止程序。 问题 4 根据上述问题 1 到 3,修改程序,使用户能够 修改所选学生的姓名。
#include <iostream>
#include <string>
using namespace std;
struct Student
string name , id , nickname;
;
struct Course
string ccode, cname, clecturer;
;
int main()
int i=0, c=0, ti=0, tc=0;
Student uniten[i];
Course cuniten[c];
cout << "\n \n" << endl;
int choice;
bool gameOn = true;
while (gameOn != false)
cout << "*******************************\n";
cout << " 1 - Add new students.\n";
cout << " 2 - Display student list.\n";
cout << " 3 - Add new course.\n";
cout << " 4 - Display course offered.\n";
cout << " 5 - Exit.\n";
cout << " Enter your choice and press return: ";
cin >> choice;
switch (choice)
case 1:
cout << "Add new students.\n";
i = i+1;
cout << "\n \n" << endl;
cout << "Student " << i << endl;
cout << "Enter Student ID: ";
cin >> (uniten[i].id);
cout << "Enter their Name: ";
cin >> uniten[i].name;
cout << "Enter their Nickname: ";
cin >> uniten[i].nickname;
cout << "\n \n" << endl;
break;
case 2:
cout << "Display Student List\n";
break;
case 3:
cout << "Add new course.\n";
c = c+1;
cout << "\n \n" << endl;
cout << "Course " << c << endl;
cout << "Enter Course Code: ";
cin >> (cuniten[c].ccode);
cout << "Enter Course Name: ";
cin >> cuniten[c].cname;
cout << "Enter Lecturer Name: ";
cin >> cuniten[c].clecturer;
break;
case 4:
cout << "Display Course List\n";
for (tc=0; tc<c; tc++)
cout << "Course : " << cuniten[i].cname << " Course Code : " << cuniten[i].ccode << ", Lecturer name : " << cuniten[i].clecturer <<endl;
cout << "\n \n" << endl;
break;
case 5:
cout << "End of Program.\n";
gameOn = false;
break;
default:
cout << "Not a Valid Choice. \n";
cout << "Choose again.\n";
cin >> choice;
break;
【问题讨论】:
我对 SO 上另一个问题的回答可能有助于解决您的问题。 ***.com/a/58756962/434551.Student uniten[i]; Course cuniten[c];
可能由于几个原因而导致重大灾难。首先是 C++ 不允许长度为 0 的数组。第二个是它不允许在运行时使用该语法分配数组。对于动态数组,您需要一个 std::vector
或指针(尽管这不是首选)。
【参考方案1】:
int i=0, c=0, ti=0, tc=0;
Student uniten[i];
Course cuniten[c];
在上面的代码中,数组的大小分别为 i=0 和 c = 0。
case 1:
cout << "Add new students.\n";
i = i+1;
cout << "\n \n" << endl;
cout << "Student " << i << endl;
cout << "Enter Student ID: ";
cin >> (uniten[i].id);
cout << "Enter their Name: ";
cin >> uniten[i].name;
cout << "Enter their Nickname: ";
cin >> uniten[i].nickname;
cout << "\n \n" << endl;
在 switch 案例中,您正在更新 i=i+1
,它试图访问 uniten[1] 处不存在的索引。
【讨论】:
更糟糕的是:int i = 0 /* or any other value */; Student uniten[i];
使用 Variable Length Array,这在 C99 标准中是可选的,但在 C++ 中不是。一些编译器在 C++ 中也支持它(作为专有扩展)。但是,它不应该在 C++ 中使用。 (std::vector
是充分的替代品。)而且,长度为 0 的数组会使情况变得更糟......
谢谢,我明白了!但是如何根据用户输入的数量来声明大小。我无法得到那部分。
你应该使用 std::vector 而不是数组以上是关于c++ 。我试图通过在开关内使用数组来获取用户输入,但是当我运行代码时它显示分段错误?的主要内容,如果未能解决你的问题,请参考以下文章