gets()中的错误,不是编译错误,而是无法接收输入

error in gets(), not compile errors but unable to receive input

本文关键字:错误 输入 gets 编译      更新时间:2023-10-16

我遇到了一个问题,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;
}

如果有什么不清楚的,不要犹豫,问我!我很高兴接受任何答复/解决方案/建议!

在接受字符串输入之前使用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;
}