错误:"得到"不要在代码块10.0中声明

时间:2017-05-03 20:40:15

标签: c++ gets

 #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;
}

1 个答案:

答案 0 :(得分:1)

使用std::cin.getline代替getsstd::string代替char []

正如评论所指出的那样,gets未在iostream中声明。此外,它在C ++ 11中已被弃用,在C ++ 14中被删除,这意味着即使包含cstdiostdio.h,它也不会在支持C ++ 14的编译器中编译。

但是,永远不要将std::cin用于char []。原因与gets相同。当输入长于缓冲区时,两者都会使程序处于缓冲区溢出的危险之中,这将导致程序出现意外行为,如崩溃。而破解者甚至可能用它破解你的整个计算机。