当我输入ID时,命名并添加。 Id和Name输入成功,但不是Name。
输出仅显示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);
}
最佳答案
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?"
。关于c++ - Getline函数的此C++代码有什么问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49567692/