Когда я запускаю программу, он сразу же переходит к части ввода меток и вообще пропускает часть getline. Также, когда я использую cin, он отлично работает, но я, очевидно, не могу прочитать полное имя. Что я делаю не так? Вот структура с функциями ввода и вывода:
struct student
{
string name;
float marks;
void getinfo()
{
cout<<"Enter name:\n"; getline (cin , name); //This part gets skipped
cout<<"Enter marks:\n"; cin>>marks; cout<<endl;
}
void showinfo()
{
cout<<"\nName: "<<name;
cout<<"\nMarks: \n"<<marks;
}
};
И вот функция, которую я называю:
void stack::push()
{
if(top==4)
cout<<"Overflow!\n";
else
{
top++;
S[top].getinfo();
}
}
И наконец, вот классный стек:
class stack
{
student S[5];
int top;
public:
stack() { top=-1;}
void push();
void pop();
void display();
};
Если вы смешиваете использование cin
и getline
вы должны помнить, что cin
обычно оставляет символ \n
в буфере клавиатуры. Когда getline
ckecks buffer, он видит \n
символ как первый и сразу заканчивается. Используйте cin.ignore
перед функцией getline
для удаления символа \n
.