【问题标题】:Why is the syntax for taking the input about name not working?为什么输入有关名称的语法不起作用?
【发布时间】:2020-03-25 14:44:46
【问题描述】:
#include<iostream>
#include<string>
using namespace std;
class data{
            string name;
            string code;
        public :
            void getname()
            {
                cout<<"Enter name : ";
                getline(cin,name);
            }
            void getcode()
            {
                cout<<"Enter code : ";
                getline(cin,code);
            }
            void display()
            {
                cout<<"Name : "<<name;
                cout<<"Code : "<<code;
            }
            };
int main()
{
    int n,i=0; cin>>n;
    data stud[n];
    while(i<n)
    {
        stud[i].getname();
        stud[i].getcode();
        i++;
    }
    for(int i=0;i<n;i++)
        stud[i].display();
    return 0;
}

在第 13 行:getline() 未执行。谁能解释其原因和替代方法? 最初,我认为我可能错过了一个头文件或语法错误,但事实并非如此,因为 code 的输入语法工作得很好。

【问题讨论】:

  • 您的程序中有两次getline(cin,code);。没有设置name

标签: c++ string class oop


【解决方案1】:

cingetline函数交替使用时,你应该清除cin输入流。通过使用cin.ignore() 功能。 在这里,我在您的 cin 语句之后使用 cin.ignore(),因为您想在使用 cin 获取 int 变量后忽略缓冲区中留下的 "\n"

#include<iostream>
#include<string>
using namespace std;
class data{
            string name;
            string code;
        public :
            void getname()
            {
                cout<<"Enter name : ";
                getline(cin,name);
            }
            void getcode()
            {
                cout<<"Enter code : ";
                getline(cin,code);
            }
            void display()
            {
                cout<<"Name : "<<name;
                cout<<"Code : "<<code;
            }
            };
int main()
{
    int n,i=0; 
    cin>>n;
    cin.ignore();
    data stud[n];
    while(i<n)
    {
        stud[i].getname();
        stud[i].getcode();
        i++;
    }
    for(int i=0;i<n;i++)
        stud[i].display();
    return 0;
}

希望这可能会有所帮助:)

【讨论】:

    【解决方案2】:

    对于初学者来说,这个函数中有一个错字

            void getname()
            {
                cout<<"Enter name : ";
                getline(cin,code);
                            ^^^^
            }
    

    还有这个数组的声明

    int n,i=0; cin>>n;
    data stud[n];
    

    无效。变量 n 未初始化,可变长度数组不是标准 C++ 特征。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 2017-12-10
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多