2017-05-03 4 views
-3
#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

なぜあなたはC++プログラムでgetsを使用しようとしているのですか? – pm100

+2

の 'cin'は 'iostream'(これは/ C関数でした)で宣言されておらず、時代遅れです。たとえそれがあなたの図書館で利用可能であっても、あなたはそれを決して使うべきではありません。 C++でC++ I/Oを使用する。 – molbdnilo

+0

とstd :: stringをchar [20] – pm100

答えて

1

使用std::cin.getlineの代わりに、getsstd::string代わりのchar []に対応THIに宣言していない「取得」。

getsは、iostreamで宣言されています。さらに、C++ 11では廃止され、C++ 14では削除されています。つまり、cstdioまたはstdio.hが含まれていても、C++ 14をサポートするコンパイラではコンパイルされません。

でも、char []にはstd::cinを使用しないでください。理由はgetsと同じです。どちらも入力がバッファよりも長い場合、バッファオーバーフローの危険性の下でプログラムを作成します。これにより、プログラムにクラッシュなどの予期しない動作が発生します。そしてクラッカーはあなたのコンピュータ全体をハックするかもしれません。

関連する問題