2016-10-27 8 views
0

gets()がエラーをコンパイルせずに動作しない場合があります。つまり、gets()は値を返しませんが、警告やエラーの説明は返しません。ここ は、それが価値gets()でエラーが発生しましたが、エラーはコンパイルされませんでしたが、入力を受け取れません

#include<iostream> 
#include<conio.h> 
#include<stdio.h> 
using namespace std; 

class student 
{ 
private: 
    int admno; 
    char sname[20]; 


public: 
    void Takedata() 
    { 
     cout<<"Enter admission number "; 
     cin>> admno; 

     cout<<"Enter student name " ; 
     gets(sname); 
    } 

    void Showdata() 
    { 
     cout<<"Admission number "<<admno<<"\nStudent name "<<sname; 
    } 
}; 

int main() 
{ 
    student obj ; 
    obj.Takedata(); 
    obj.Showdata(); 
    getch(); 
    return 0; 
} 

を返していないコードであるとは対照的に、ここでは何が不明な場合は私に尋ねることを躊躇してはいけない「​​SNAME」

#include<iostream> 
#include<conio.h> 
#include<stdio.h> 
using namespace std; 

class student 
{ 
private: 
    int admno; 
    char sname[20]; 


public: 
    void Takedata() 
    { 

     cout<<"Enter student name " ; 
     gets(sname); 
    } 

    void Showdata() 
    { 
     cout<<"\nStudent name "<<sname; 
    } 
}; 

int main() 
{ 
    student obj ; 
    obj.Takedata(); 
    obj.Showdata(); 
    getch(); 
    return 0; 
} 

に値を返すのコードです!私は蟻の答え/ソリューション/アドバイスを受け入れることがうれしいです!

+2

C11とC++では、 'gets'が削除されていることに注意してください。 C++では、実際には文字列を扱うために 'std :: string'と' getline'を使うべきです。 – NathanOliver

+0

[決して 'gets'を使用する](http://stackoverflow.com/q/1694036/10077)。 –

+0

返信いただきありがとうございます。getname(sname)をgetline(cin、sname)に変更しました。char sname [20]を文字列snameに変更しても、同じ問題が発生します。 –

答えて

0

文字入力を行う前にcin.ignore()を使用してください。これを試しても問題ありません。

#include<iostream> 
#include<conio.h> 
#include<stdio.h> 

using namespace std; 

class student 
{ 
private: 
    int admno; 
    char sname[20]; 



public: 
    void Takedata() 
    { 
     cout<<"Enter admission number "; 
     cin>> admno; 
     cin.ignore(); 
     cout<<"Enter student name " ; 
     gets(sname); 

    } 

    void Showdata() 
    { 
     cout<<"\nAdmission number "<<admno<<"\nStudent name "<<sname; 
    } 
}; 

int main() 
{ 
    student obj ; 
    obj.Takedata(); 
    obj.Showdata(); 
    getch(); 
    return 0; 
} 
+0

私の返事をありがとうございます。 cin.ignore(std :: numeric_limits :: max()、 '\ n'); cin.ignore(256、 "\ n")は同じ意味ですか? –

+0

マークしてください受け入れられupvoteとして。それは私を奨励する:) – Real73

関連する問題