#include <iostream>
enum SEX {MALE, FEMALE};
int main(int argc, char**argv)
{
enum SEX the_sex = MALE;
return 0;
}
枚舉的值如何顯示在終端或控制檯上the_sex值,接受來自終端或控制檯值更新the_sex的值以及如何能予有效的輸入爲the_sex變量?顯示,更新和確認在C++
#include <iostream>
enum SEX {MALE, FEMALE};
int main(int argc, char**argv)
{
enum SEX the_sex = MALE;
return 0;
}
枚舉的值如何顯示在終端或控制檯上the_sex值,接受來自終端或控制檯值更新the_sex的值以及如何能予有效的輸入爲the_sex變量?顯示,更新和確認在C++
How can I accept values from the terminal or console to update the value of the_sex and how can I valid the input for
the_sex
variable?
輸入可以通過任何你想要被表示爲整數(1男性,2女),一個char
(男性「M」,「F」爲女性),一個std::string
。下面是該char
版本的代碼示例:
char in;
std::cin >> in;
switch (in) {
case 'M':
the_sex = MALE;
break;
case 'F':
the_sex = FEMALE;
break;
default:
// invalid input
break;
}
,或者這裏的std::string
版本:
std::string in;
std::cin >> in;
if (in == "MALE") the_sex = MALE;
else if (in == "FEMALE") the_sex = FEMALE;
else // invalid input
How can I display the_sex value on the terminal or console?
您可以簡單地用一個switch
語句打印出的值的SEX
變量:
std::ostream& operator<<(std::ostream& os, SEX the_sex) {
switch (the_sex) {
case MALE:
os << "MALE";
break;
case FEMALE:
os << "FEMALE";
break;
}
return os;
}
更好地重載operator <<而不是僅僅將代碼粘貼到main中並輸出到std :: cout中。 – Puppy
要輸出枚舉的值可以簡單地寫
std::cout << the_sex;
枚舉將顯示爲一個整數值(在此情況下爲1)。
爲了得到和可以使用例如枚舉驗證值我使用宏這樣做下面的循環
int e;
do
{
std::cout << "Enter the sex of the person (0 - FEMALE, 1 - MALE): ";
} while (std::cin >> e && e != 0 && e != 1);
if (std::cin) the_sex = static_cast<SEX>(e);
。
#define name_num(NAME, ...) \
class NAME { \
\
public: \
\
enum enums{NAME_NUM_BEGIN_OF_ENUM_MAP, \
__VA_ARGS__, \
NAME_NUM_END_OF_ENUM_MAP}; \
\
using map_type = boost::bimap<enums, std::string>; \
\
NAME(std::string const& str) { \
std::vector<std::string> v; \
boost::split(v, str, boost::is_any_of(", "), boost::token_compress_on); \
map_type m; \
\
for(int i=NAME_NUM_BEGIN_OF_ENUM_MAP+1; i!=NAME_NUM_END_OF_ENUM_MAP; i++) \
map_.insert(map_type::value_type(static_cast<enums>(i), v[i-1])); \
} \
\
std::string string(enums val) { return map_.left.at(val); } \
\
enums number(std::string const& val) { return map_.right.at(val); } \
\
private: \
map_type map_; \
} NAME(#__VA_ARGS__)
它創建一個通常的枚舉列表,可以照常使用(例如在交換機中)。還使用boost bimap將枚舉映射到相應的字符串。
宏的第一個參數是用於訪問枚舉和方法的類和實例的名稱。
找到您使用的枚舉number
並找到您使用的字符串string
方法。如果字符串(在方法編號中)沒有指向一個有效的枚舉,則會拋出一個std::out_of_range("bimap<>: invalid key")
。
參見this的例子。
你想要用戶能夠進入什麼? 「MALE」或「FEMALE」大概是? – BoBTFish
@BoBTFish是的,沒關係。 – user2699298