2015-10-21 1 views
0

Прошу прощения, если этот вопрос немного длинный. Я постараюсь держать его коротким, но кратким.C++ Преобразование различных типов в строку Временно

Я создаю основную программу для начального уровня курса C++, где я создаю макетную версию управления сотрудниками для склада. Общая форма заключается в том, что пользователю предлагается ввести ввод, чтобы выбрать тип сотрудника, а затем, на основе ввода, затем предлагается ввести данные сотрудника, относящиеся к типу сотрудника.

В связи с этим существуют функции, которые принимают входные данные как int, float, string и char. У меня есть отдельная функция меньшего размера, которая проверяет «выход» на вход и выходит из программы, если это правда. В настоящее время я сконструирован таким образом, что все входы классифицируются как строки, но это, очевидно, вызывает проблемы позже, когда я пытаюсь приравнять значения численно.

Вот моя текущая версия функции проверки и один из введенных пользователем функций:

//Current add_employee function 
void add_employee() 
{ 
     string emp_type = ""; 
     bool exit_check; 
     cout << "Please select employee type. Enter 1 for Manager or 2 for Dockhand." << endl; 
     getline(cin, emp_type); 
     if(name.empty()) 
     { 
       cout << "Cannot accept empty field as input. Please answer with 1 for Manager, or 2 for Dockhand." << endl; 
       add_employee(); 
     } 
     exit_check = check_input(emp_type); 
     if(exit_check == true) 
     { 
       return; 
     } 
     if(emp_type == "1") 
     { 
       add_manager; 
     } 
     else if(emp_type == "2") 
     { 
       add_dockhand; 
     } 
     else 
     { 
       cout << "Sorry. Your input is invalid. Please answer with 1 for Manager, or 2 for Dockhand." << endl; 
       add_employee(); 
     } 
} 

//Current check function 
bool check_input(string input_var) 
{ 
     if(input_var == "exit") 
     { 
       return true; 
     } 
     else 
     { 
       return false; 
     } 
} 

Что касается моего вопроса. Есть ли относительно простой способ сохранить структуру моего кода, взяв ввод как int, а затем преобразовать его в строку, чтобы проверить «exit», но также иметь вход, все еще считающийся int, если значение exit_check ложно? Я думал о том, что входные данные назначены двум переменным, но это казалось пустой тратой кода.

Пожалуйста, дайте мне знать, если что-то имеет смысл, и я отредактирую его в OP.

+0

Не уверен, что вы подразумеваете под этим?Это гораздо больше, чем просто для всей программы, но не было смысла копировать все это в вопрос, когда двух функций достаточно, чтобы показать, что я имею в виду. –

+0

Почему вы хотите использовать строку для проверки типа сотрудника? Вы можете напрямую сравнивать типы int и назначать определенное целое для выхода. –

+0

@Raul Это то, чем мой первоначальный проект был, но тогда я не смог получить функцию check_input, чтобы проверить вход «exit». Я пытался настроить его таким образом, чтобы функция check_input могла использоваться после каждого этапа ввода, поэтому мне не приходилось копировать код каждый раз. Не все пользовательские входы будут одного типа. –

ответ

0

GetLine (CIN, emp_type); собирается захватить строку от пользователя. Вы не получаете int в качестве входа в любом месте этого кода.

Вы могли бы упростить это за счет изменения:

exit_check = check_input(emp_type); 
     if(exit_check == true) 
     { 
       return; 
     } 

в

if(emp_type.compare("exit") == 0) 
      { 
        return; 
      } 

, который проверяет, если строки равны. (Подробные сведения об этом операторе см. В разделе compare()) и удаление функции check_input.

Если вам нужно ввести int с ввода, то zenith в значительной степени покрыт, как это сделать.

+0

Итак, в основном я принимаю все входные данные как строки, сравнивая их с выходом, проверяя пустое поле с if (name.empty()), а затем преобразовывая вход в int после? Просто проверьте, понимаю ли я этот процесс. Возможно ли преобразовать строки в char или float? Я должен был бы сделать один и тот же процесс внутри других функций, требующих этих типов. –

+1

Или еще проще: 'emp_type ==" exit "вместо' emp_type.compare ("exit") == 0'. – emlai

+0

@ DwayneH Да, почему бы и нет. 'input.at (0)' получит первый символ, а для float-преобразования будет ['std :: stof'] (http://en.cppreference.com/w/cpp/string/basic_string/stof). Помните, что пользовательский ввод всегда является строкой, и только путем разбора этой строки вы можете получить числовые значения, представленные в этом текстовом формате. – emlai

0

принимает входные данные как межд, затем преобразование его в строку, чтобы проверить на «выходе»

Это невозможно. Если вы прочитаете ввод в int, любой нечисловый ввод не будет выполнен, и вы не сможете проверить строку «exit».

Что вы можете сделать, это вход в виде строки в переменной, скажем input, а затем преобразовать его в целое с stoi:

int emp_type = std::stoi(input); 

Как и в сторону, вы можете взять параметр check_input в качестве ссылки, чтобы избежать сделать копию всей строки каждый раз, когда вызывается функция:

bool check_input(string const& input_var)