Функция со структурой, застрявшей во входном контуре - PullRequest
0 голосов
/ 31 марта 2019

Я пишу базовую программу для класса, чтобы управлять списком событий. У меня есть функция void со структурой для ввода новых данных, которые застряли в цикле. Структура создается и после завершения части ввода данных она возвращается и повторяется.

Я попытался заключить его в do{}while loop и попытался разбить его на серию if операторов. Есть ли команда или диалог для выхода или завершения структуры?

По запросу, минимум:

#include <iostream>
#include <string>
#include <algorithm>
#include <stdio.h>
using namespace std;

void menu();
void AddANewEvent();

struct Event{    //struct to hold event data, name, location, description, date, start time, and duration

     string EventName;
     string EventLoc;    // location for the event
     string EventDesc;   //describe the event
     string Date;        //date in DD/MM/YYYY format
     string StartTime;    //time to start in 24H format
     float Duration;       //time in whole hours
};

int main()
{
menu();
//AddANewEvent();  removed this and it works...
return 0;
}

void menu(){
     int action = 0;
     cout << "Event List Management Menu" << endl;
     cout << "1.  Add new event" << endl;                                  //  add a new event, almost feeling positive about this part but it may be delirium.
     cout << "Please select an action (1): " ;                                     //prompt user for input
     cin >> action;                                                                                //storing input

     switch(action)
     {
          case 1: AddANewEvent(); break;
     }}

void AddANewEvent(){
          Event evn;
                    cout << "Enter event name: " << endl;
                    cin >> evn.EventName;
                    cout << "Enter event location: " << endl;
                    cin >> evn.EventLoc;
                    cout << "Enter event description: " << endl;
                    cin >> evn.EventDesc;
                    cout << "Enter date: " << endl;
                    cin >> evn.Date;
                    cout << "Enter start time: " << endl;
                    cin >> evn.StartTime;
                    cout << "Enter duration in hours: " << endl;
                    cin >> evn.Duration;
} //end of the function

Вот откуда моя проблема:

void AddANewEvent(string &fileName){
     Event evn;
     cout << "Enter event name: " << endl;
     cin >> evn.EventName;
     cout << "Enter event location: " << endl;
     cin >> evn.EventLoc;
     cout << "Enter event description: " << endl;
     cin >> evn.EventDesc;
     cout << "Enter date: " << endl;
     cin >> evn.Date;
     cout << "Enter start time: " << endl;
     cin >> evn.StartTime;
     cout << "Enter duration in hours: " << endl;
     cin >> evn.Duration;
} //end of the function

Я думаю, что моя структура в порядке:

struct Event{    //struct to hold event data, name, location, description, date, start time, and duration

     string EventName;
     string EventLoc;    // location for the event
     string EventDesc;   //describe the event
     string Date;        //date in DD/MM/YYYY format
     string StartTime;    //time to start in 24H format
     float Duration;       //time in whole hours
};

В других частях этой программы я успешно реализовал подобные сегменты, где функция может быть продолжена или завершена с вопросом «да» или «нет». Однако в этом сегменте это не сработает. В идеале, после обработки этого раздела кода он будет предлагать повторить и в противном случае вернуться к основному. Все мои попытки до сих пор не смогли вернуться, только чтобы непреднамеренно повторить диалог.

1 Ответ

0 голосов
/ 31 марта 2019

Я бы начал с добавления конструктора user-def в класс Event, чтобы вы могли использовать emplace_back для хранения ваших событий в std::vector. Имейте в виду, что если вы решите использовать addNewEvent(), то emplace_back будет запускать копию вместо использования конструктора перемещения.

Используйте простой цикл while и прерывайте его, когда пользователь не хочет продолжать добавлять другие события.

Пример: https://rextester.com/IAO89219

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...