当我输入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?

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

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

10-12 14:48
查看更多