gpt4 book ai didi

c++ - 这个 Getline 函数的 C++ 代码有什么问题?

转载 作者:行者123 更新时间:2023-11-30 02:20:32 25 4
gpt4 key购买 nike

当我输入 Id 、 Name 和 Add 时。 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 in,但不去除用户在它之后输入的换行符。下次调用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?

你会得到一个 Id1 , 忽略该行的其余部分,一个 Name"Fred" , 和一个 Add"Where am I?" .

关于c++ - 这个 Getline 函数的 C++ 代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49567692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com