2017-02-20 3 views
-6
#include<iostream> 
using namespace std; 
class emp 
{ 
    public: 
       int en; 
       char name[10],des[10]; 
void get() 
{ 
    cout<<"enter emp no."; 
    cin>>en; 
    cout<<"enter emp name"; 
    cin>>name; 
    cout<<"enter designation"; 
    cin>>des; 
} 
}; 
class salary : public emp 
{ 
public: 
    float bp,hra,da,pf,np; 
    void get1() 
    { 
    cout<<"enter basic pay"; 
    cin>>bp; 
    cout<<"enter domestic allowance"; 
    cin>>da; 
    cout<<"enter profit fund"; 
    cin>>pf; 
    cout<<"enter human resource admittance"; 
    cin>>hra; 
    } 
    void calculate() 
    { 
     np=bp+da+hra-pf; 
    } 

    void display() 
    { 
     cout<<en<<"\t"<<name<<"\t"<<des<<"\t"<<da<<"\t"<<pf<<"\t"<<np<<"\n"; 

    } 
    }; 

    int main() 
    { 
    salary s[10]; 
    int i,n; 
    char ch; 
    cout<<"enter the no. of employees"; 
    cin>>n; 
    for(i=0;i<=n;i++) 
    { 
    s[i].get(); 
    s[i].get1(); 
    s[i].calculate(); 
    } 
    cout<<"\n eno. \t ename \t des \t bp \t hra \t da \t pf \t np \n"; 
    for(i=0;i<=n;i++) 
    { 
    s[i].display(); 
    } 
    return 0; 
    } 
+1

あなたは – fukanchik

+1

'CIN >>名[10]を直面する特定の問題を記述してください;' => ' cin >> name; 'desとの同義語 –

+2

配列の名前は" name "と" des "です。私は[本のリスト](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)を訪問することをお勧めします。 – molbdnilo

答えて

2

cin>>des[10];は、標準的な入力のための(単一の)文字を読み取り、des[10]に書き込みしようとします。残念ながら、desは10文字であると定義しているので、des[0]からdes[9]までしか有効でないため、des[10]に書き込もうとすると、未定義の動作が発生します。これはcinから最大10個の文字を読み、desにそれらを書き込もう(それはNUL終了していますことを保証する)

cin.getline(des, 10); 

私の推測では、あなたはおそらくより多くのようなものを望んでいたということです。

もちろん、同じことがnameに当てはまります。

これが完了したら、上記のすべてを忘れて、namedesの両方をstd::stringと定義します。その後、std::getline(std::cin, name);を使用できます。これで、最大サイズを指定する必要はありません。文字列はユーザ​​ーが入力した分だけ保持されます。

+0

を置く場所は、全体のプログラムを書く必要があります。 – Tp25

0

代わりの名前[10]とデ[10]、使用CIN >>名とCIN >>デ

関連する問題