C++ 临时将不同类型转换为字符串
C++ Converting Different Types to String Temporarily
如果这个问题有点啰嗦,我深表歉意。我会尽量保持简短。
我正在为入门级 C++ 课程构建一个主要程序,我正在为仓库创建员工管理的模拟版本。一般的形式是要求用户输入select员工的类型,然后,根据输入,然后要求用户输入与该员工类型相关的员工详细信息。
因此,有些函数接受输入为 int、float、string 和 char。我有一个单独的较小的函数,用于检查 'exit' 作为输入,如果为真,则退出程序。我目前有这样的设计,以便所有输入都被归类为字符串,但这显然会在以后尝试用数字等同值时引起问题。
这是我当前版本的检查功能和用户输入功能之一:
//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',但如果 exit_check 是假的?我正在考虑将输入分配给两个变量,但这感觉就像是在浪费代码。
请告诉我是否有任何意义,我会将其编辑到 OP 中。
taking the input as an int, then converting it to a string to check for 'exit'
那是不可能的。如果将输入读入 int,任何非数字输入都将失败,并且您将无法检查字符串 'exit'.
你可以做的是将输入作为变量的字符串,比如 input
,然后使用 stoi
:
将其转换为 int
int emp_type = std::stoi(input);
顺便说一句,您可能希望通过引用获取 check_input
的参数,以避免每次调用该函数时都复制整个字符串:
bool check_input(string const& input_var)
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 函数。
如果您需要来自输入的整数,那么 zenith 几乎涵盖了如何做到这一点。
如果这个问题有点啰嗦,我深表歉意。我会尽量保持简短。
我正在为入门级 C++ 课程构建一个主要程序,我正在为仓库创建员工管理的模拟版本。一般的形式是要求用户输入select员工的类型,然后,根据输入,然后要求用户输入与该员工类型相关的员工详细信息。
因此,有些函数接受输入为 int、float、string 和 char。我有一个单独的较小的函数,用于检查 'exit' 作为输入,如果为真,则退出程序。我目前有这样的设计,以便所有输入都被归类为字符串,但这显然会在以后尝试用数字等同值时引起问题。
这是我当前版本的检查功能和用户输入功能之一:
//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',但如果 exit_check 是假的?我正在考虑将输入分配给两个变量,但这感觉就像是在浪费代码。
请告诉我是否有任何意义,我会将其编辑到 OP 中。
taking the input as an int, then converting it to a string to check for 'exit'
那是不可能的。如果将输入读入 int,任何非数字输入都将失败,并且您将无法检查字符串 'exit'.
你可以做的是将输入作为变量的字符串,比如 input
,然后使用 stoi
:
int emp_type = std::stoi(input);
顺便说一句,您可能希望通过引用获取 check_input
的参数,以避免每次调用该函数时都复制整个字符串:
bool check_input(string const& input_var)
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 函数。
如果您需要来自输入的整数,那么 zenith 几乎涵盖了如何做到这一点。