2016-10-27 57 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++ 14中'gets'已被删除。在C++中,你应该使用'std :: string'和'getline'来处理字符串。 – NathanOliver

+0

[永远不要使用'gets'](http://stackoverflow.com/q/1694036/10077)。 –

+0

谢谢你的回复,我把gets(sname)改为getline(cin,sname),char sname [20]改为string sname,同样的问题仍然存在。 –

回答

0

使用cin.ignore()之前采取字符串input.I试试这个,它工作正常。

#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 (); cin.ignore(std :: numeric_limits :: max(),'\ n');和cin.ignore(256,“\ n”)具有相同的含义? –

+0

请标记作为接受和upvote。它会鼓励我:) – Real73