程序的执行在 C++ 中输入 char 变量后结束



我写了一个程序,要求学生的姓名和他的分数。一切都编译顺利,但在执行后,程序只要求名称,然后停止。

#include <iostream>
int main(){
class student{
public :
char *name;
int marks1; int marks2;
student(char* n, int n1, int n2){
name=n, marks1=n1, marks2=n2;
}
int calc_med(){return (marks1+marks2)/2;}
void display(){
std::cout<<name<<"n The mediane is >> "<<calc_med()<<"n";
}
};
char *name1;
std::cout<<"Enter the student's name > ";
std::cin>>name1;
int m1;
std::cout<<"Enter the first mark > ";
std::cin>>m1;   
int m2;
std::cout<<"Enter the second mark > ";
std::cin>>m2;

student student1(name1,m1,m2);
student1.display();
return 0;
}

您需要分配name(或name1

(。有很多方法可以做到这一点,但最好的方法是 a( 使用std::string


std::string name;

或 b( 将名称转换为数组:

char name[BUFFER_SIZE]; // BUFFER_SIZE is some constant

注意:b(可能需要一些特殊的逻辑来确保你不会超过BUFFER_SIZE,但我会留给你来弄清楚。

在代码的这一部分中:

char *name1;
std::cout<<"Enter the student's name > ";
std::cin>>name1;

name1只是一个变量,可以将地址存储为char类型。如果要为此变量提供数据,请尝试分配一些内存来name1

char *name1 = new char[50];

现在,name1有一大块连续内存,您可以在其中放置多达 50 个char值。new将分配该空间,然后将name1该空间所在的地址提供给该空间。

当您尝试将数据分配给未定义的地址时,由于未定义的行为,程序崩溃。

编辑:正如其他人指出的那样,std::string应该与std::cin一起使用,代替C字符串char*,因为它不需要内存分配并且是一种更安全的方法。string中的内存会自动为您分配和管理,让您无需为char阵列创建和删除空间。

最新更新