Я здесь, в том числе простая программа, написанная на C ++, где я пытаюсь использовать параметризованный конструктор. Моя идея состоит в том, чтобы создать экземпляр класса динамически и захватить требуемую задачу.
Но всякий раз, когда я запускаю программу и ввожу задание 1, она просто печатает две строки (то есть введите Name.Enter Tel.No.). На самом деле предполагается напечатать «Введите имя». затем введите имя, а затем снова выведите «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();
}
Это, вероятно, не имеет ничего общего с вашим конструктором, а скорее со смешением cin >> и getline. Добавьте getline в переменную мусора после cin >> myTask, и она должна работать.
Ты используешь cin >> myTask
прочитать первый вход. Когда вы нажмете Enter, чтобы задать 1, выбрав «Добавить запись», эта 1 будет считана из буфера, но ваша новая строка все еще будет во входном буфере. Итак, первый getline
будет только читать это из буфера, производя пустой ввод для строки getline(cin, fullname);
Причина в том, что первая новая строка после типа задачи не используется
cin >> myTask
Итак fullname
чтение будет читать только пустую строку, а пункт «enter Tel.No» будет напечатан напрямую.
Вставьте getline
позвонить после cin >> myTask
чтобы исправить эту проблему.
Также см этот вопрос.