当我运行程序时,它会立即进入输入标记部分并完全跳过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();
};
答案 0 :(得分:0)
如果混用cin
和getline
,则必须记住cin
通常会在键盘缓冲区中留下\n
个字符。当getline
ckecks缓冲时,将\n
字符视为第一个并立即结束。在cin.ignore
函数之前使用getline
删除\n
字符。