当我输入ID,名称和添加时。身份和姓名输入成功,但不是姓名。
输出显示仅ID和名称,但名称显示在添加位置。
任何人都可以告诉我 getline()初始化功能是正确还是不正确?
#include<iostream>
using namespace std;
class Stu_Record
{
private:
int Id;
char Name[20];
char Add[20];
public:
void Input_Data();
void Display_Data();
};
void Stu_Record::Input_Data()
{
cout<<endl<<"Enter Id,Name And Address:";
cin>>Id;
cin.getline(Name,20);
cin.getline(Add,20);
}
void Stu_Record::Display_Data()
{
cout<<endl<<"Id Is :"<<ends<<Id;
cout<<endl<<"Name Is :"<<ends<<Name;
cout<<endl<<"Address Is :"<<ends<<Add;
}
int main()
{
Stu_Record S;
S.Input_Data();
S.Display_Data();
return(0);
}
答案 0 :(得分:3)
cin>>Id;
会读取Id
,但不会删除用户在其后输入的换行符。下一次调用getline
会看到下一个字符是换行符,消耗它,并愉快地填充Name
作为空字符串。然后,最终的getline
会填写您希望转到Name
的内容,因为Add
的值(并且根本不会读取Add
的值)。
一个简单的解决方法是在阅读Id
后放弃剩余的一行,这样当你尝试阅读Name
时,你就不会有垃圾。一种方法是the ignore
method on input streams:
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
会丢弃数据读取后的所有内容,以填充Id
到下一个换行符,因此如果用户输入:
1 why did I type this garbage, oh the humanity
Fred
Where am I?
您将获得Id
1
,忽略该行的其余部分,Name
"Fred"
和Add
"Where am I?"
。