#include<iostream>
using namespace std;
class student
{
private:
int admno;
char sname[20];
float eng,math,science;
float total;
float ctotal()
{
return eng+math+science;
}
public:
void Takedata()
{
cout<<"Enter admission number ";
cin>> admno;
cout<<"Enter student name " ;
gets(sname);// here its giving the error
cout<< "Enter marks in english, math, science ";
cin>>eng>>math>>science;
total=ctotal();
};
void Showdata()
{
cout<<"Admission number "<<admno<<"\nStudent name "<<sname<<"\nEnglish "
<<eng<<"\nMath "<<math<<"\nScience "<<science<<"\nTotal "<<total;
}
};
int main ()
{
student obj ;
obj.Takedata();
obj.Showdata();
return 0;
}
答案 0 :(得分:1)
使用std::cin.getline
代替gets
和std::string
代替char []
。
正如评论所指出的那样,gets
未在iostream
中声明。此外,它在C ++ 11中已被弃用,在C ++ 14中被删除,这意味着即使包含cstdio
或stdio.h
,它也不会在支持C ++ 14的编译器中编译。
但是,永远不要将std::cin
用于char []
。原因与gets
相同。当输入长于缓冲区时,两者都会使程序处于缓冲区溢出的危险之中,这将导致程序出现意外行为,如崩溃。而破解者甚至可能用它破解你的整个计算机。