如何解决我如何将枚举更改为字符?我正在尝试投射它,但它给了我一个错误
所以我应该制定一个旅行计划来帮助旅行者了解他们的位置(北、南、东、西)。我们应该为菜单选项创建枚举数据类型,而不是使用字符选项,用户可以在其中选择他们要去的方向,并告诉他们总距离和离家的距离。 我试图投射枚举,但我收到此错误:预期的主表达式之前;令牌。” 这是我的代码。
int main(){
char option_letter;
int lat1 = 0;
int lat2 = 0;
int long1 = 0;
int long2 = 0;
double distance = 0;
int totaldistance = 0;
enum direction_t {north = 'n',South = 's',East = 'e',West = 'w',Home = 'h',Quit = 'q'};
direction_t direction = static_cast<direction_t>(tolower(option_letter));
cout <<"Starting home at 0 north/South and 0 East/West,this program shows your position"<<endl;
cout<<"after travelling 10 miles: north,south,east or west,how far you are from home"<<endl;
cout<<"and how far you have traveled in total. You can jump home or quit." <<endl;
distance = sqrt(pow(lat2-lat1,2) + pow(long2-long1,2));
totaldistance = (lat1 + lat2) + (long1 + long2);
while (true){
cout <<"Location:"<< "longitude:" << long1<<" N"<< " latitude:" << lat1<<" E"<< " ""distance from home:"<< distance<< " ""distance traveled:"<< totaldistance<<endl;
cout <<"Choose direction to travel(0 to quit) N)orth,S)outh,E)ast,W)est,H)ome,Q)uit:"<<endl;
cin << direction_t;
switch(direction_t){
case 'n':{
distance = sqrt(pow(lat2-lat1,2) * 1);
totaldistance = (lat1+ lat2) + (long1 + long2);
break;
}
case 'e':{
distance = sqrt(pow(lat2-lat1,2) * 1);
totaldistance = (lat1 + long1) + (long1 + long2);
break;
}
}
}
return 0;
}
解决方法
" ""离家的距离:"
你忘记删除额外的引号
除此之外,cin (>>) 需要右箭头
,有几个问题:
第一个 cin
应该使用 >>
而不是 <<
。
那么 direction_t
是一个类型,direction
是一个变量。
最后,您不能直接读入 direction_t
类型的变量,除非您为 cin 重载 >>
运算符。
看起来强制转换实际上是正确实现的,但是,您从未初始化 option_letter
,因此您没有将任何数据传递给强制转换。根据您的问题,您应该通过 cin
将数据从 option_letter
传递到 cin >> option_letter
,然后将其转换为 direction_t
类型。
您收到错误的原因是您在应该使用 direction_t
时使用了 direction
(这发生在您程序的多个位置),并且使用了 {{ 1}} 运算符与 <<
一起使用时应该使用 cin
运算符。
你的代码应该是这样的 --
>>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。