Проблема динамического параметризованного конструктора в переполнении стека

Я здесь, в том числе простая программа, написанная на 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();
}

4

Решение

Это, вероятно, не имеет ничего общего с вашим конструктором, а скорее со смешением cin >> и getline. Добавьте getline в переменную мусора после cin >> myTask, и она должна работать.

2

Другие решения

Ты используешь cin >> myTask прочитать первый вход. Когда вы нажмете Enter, чтобы задать 1, выбрав «Добавить запись», эта 1 будет считана из буфера, но ваша новая строка все еще будет во входном буфере. Итак, первый getline будет только читать это из буфера, производя пустой ввод для строки getline(cin, fullname);

4

Причина в том, что первая новая строка после типа задачи не используется

cin >> myTask

Итак fullname чтение будет читать только пустую строку, а пункт «enter Tel.No» будет напечатан напрямую.

Вставьте getline позвонить после cin >> myTask чтобы исправить эту проблему.

Также см этот вопрос.

3
По вопросам рекламы [email protected]