[英]Whats Wrong with this C++ Code Of Getline Function?
當我輸入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
,但不會刪除用戶在其后輸入的換行符。 下一次調用getline
看到下一個字符是換行符,消耗它,並愉快地將Name
填充為空字符串。 最后的getline
然后填寫你期望進入Name
的值作為Add
的值(並且根本不讀取用於Add
的值)。
一個簡單的解決方法是在讀取Id
后丟棄剩下的行,這樣當你嘗試讀取Name
時就沒有垃圾了。 一種方法是在輸入流上使用ignore
方法 :
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
這將丟棄數據讀取后的所有內容,以將Id
填充到下一個換行符,因此如果用戶輸入:
1 why did I type this garbage, oh the humanity
Fred
Where am I?
你將獲得1
的Id
,忽略該行的其余部分, Name
為"Fred"
,並Add
"Where am I?"
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.