簡體   English   中英

這個G ++ Getline函數代碼有什么不對嗎?

[英]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?

你將獲得1Id ,忽略該行的其余部分, Name"Fred" ,並Add "Where am I?"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM