我如何重写此代码,以便用户在通过有效方向时始终显示正确的状态(CA、AL 等)字符串。
即,我如何确保在编译期间而不是在运行时,方向枚举中的每个 enum_types 都有一个有效的 case 语句?
为了。例如。我特意注释掉了东部的案例陈述。有没有办法在编译时捕获它。
我的直觉是(否)这就是语言提供默认情况的原因,因此这可能是不可能的。但我会把这个留给专家。
#include <iostream>
#include <string>
using namespace::std;
typedef enum
{
min_dir = -1,
north,
south,
east,
west,
}directions;
directions get_direction( string user_choice)
{
if(user_choice == "north")
{
return north;
}
else if (user_choice == "south")
{
return south;
}
else if (user_choice == "east")
{
return east;
}
else if (user_choice == "west")
{
return west;
}
else
{
return min_dir;
}
}
int main()
{
string user_direction;
cout << "Enter direction\n";
cin >> user_direction;
directions my_dir = get_direction(user_direction);
cout << " Print direction's description\n";
if( my_dir == min_dir)
{
// User passed junk
return -1;
}
switch(my_dir)
{
case north:
cout << "North - New york\n";break;
case south:
cout << "South - Alabama\n";break;
// case east:
// cout << "East - North Carolina\n";break;
case west:
cout << "West - California\n";break;
default:
cout << "Should Ideally never get here\n";break;
}
system("pause");
return 0;
}
编辑:这只是说明这一点的一个例子。这适用于工作中的代码。他们已经在 Windows(MSVC)和 linux(gcc)中编译了这个。这只是一个警告吗?我需要更严格的执法。
如果枚举没有 case 语句,我可以编写一些在 make 过程中出错的代码吗?