4

我在这里包括一个用 C++ 编写的简单程序,我正在尝试使用参数化构造函数。我的想法是动态地实例化类并捕获所需的任务。但每当我运行程序并输入任务 1 时,它只会打印两行(即 Enter Name.Enter Tel.No.)。它实际上应该打印“输入名称”。然后输入姓名,然后再次打印“输入电话号码”。我该如何解决这个问题?我必须在创建对象时动态使用参数化构造函数。

    #include <iostream>
    #include <conio.h>
    #include <fstream>
    #include <string>

using namespace std;

class myClass
{
     string  fullname,telephone;

public:
       myClass(int taskType = 2)
       {
          if(taskType==1)
          {
              add_record();                  
          }
          else if(taskType==2)
          {
              //view_records();
          }
          else if(taskType==3)
          {
              //delete_record();
          }else{
             // custom_error();
          }        
       }  
void add_record()
{
cout << "Enter Name.\n";
getline(cin, fullname);
cout << "Enter Tel. No.\n";
getline(cin, telephone);
}
   };

    main (){
          int myTask;
      cout << "Enter a Task-Type. \n"
           << "1 = Add Record,"
           << "2 = View Records,"
           << "3 = Delete a Record\n\n";
      cin >> myTask;
      myClass myObject(myTask);
           getch();
     }
4

3 回答 3

4

您正在使用cin >> myTask读取第一个输入。当您按回车键给出 1,选择“添加记录”时,将从缓冲区中读取 1,但您的换行符仍将在输入缓冲区中。因此,第一个getline只会从缓冲区中读取它,从而为该行产生一个空输入getline(cin, fullname);

于 2012-12-03T08:43:11.297 回答
3

原因是任务类型后面的第一个换行符没有被

cin >> myTask

所以fullname读取只会读取一个空行,“enter Tel.No”会直接打印出来。

在 之后插入getline呼叫cin >> myTask以解决此问题。

另请参阅此问题

于 2012-12-03T08:42:38.307 回答
2

这可能与您的构造函数无关,而是与 cin >> 和 getline 的混合有关。在 cin >> myTask 之后将 getline 添加到垃圾变量中,它应该可以工作。

于 2012-12-03T08:39:39.843 回答