我在这里包括一个用C ++编写的简单程序,我试图使用参数化构造函数。我的想法是动态地实例化该类并捕获所需的任务。 但每当我运行程序并输入任务1时,它只会打印两行(即输入Name.Enter Tel.No.)。它实际上应该打印“输入名称”。然后输入名称,然后再次打印“输入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();
}
答案 0 :(得分:4)
您正在使用cin >> myTask
来阅读第一个输入。按Enter键给1,选择“Add Record”,将从缓冲区中读取1,但换行符仍然在输入缓冲区中。因此,第一个getline
只会从缓冲区读取此内容,为行getline(cin, fullname);
生成空输入
答案 1 :(得分:3)
原因是
未使用任务类型之后的第一个换行符cin >> myTask
所以fullname
读数只会读取一个空行,“输入Tel.No”的内容将直接打印出来。
在getline
之后插入cin >> myTask
来解决此问题。
答案 2 :(得分:2)
这可能与你的构造函数无关,而是与cin&gt;&gt;的混合有关。和getline。在cin&gt;&gt;之后添加getline到垃圾变量myTask,它应该工作。