我正在制定一项功能,让您有时间从芝加哥前往某个城市。我试图让它循环,以便当用户选择城市时,它会给出时间并循环回来询问主要问题并让用户选择另一个城市。我还提供了一个可以退出循环的选项。到目前为止我所拥有的是:
main()
{
TripInfo trip;
int choice;
do
{
cout << "You are in Chicago. Where would you like to drive?\n"
<< "Enter number of city\n" << "1. New York City\n" << "2. Boston\n"
<< "3. Philadelphia\n" << "4. Toronto\n" << "5. Washington D.C.\n"
<< "6. Miami\n" << "7. Indianapolis\n" << "8. Los Angeles\n"
<< "9. San Fransisco\n" << "10. Phoenix\n" << "11. EXIT" << endl;
cin >> choice;
if(choice = 11)
{
cout << "Program terminated." << endl;
break;
}
trip.setDistance(choice);
cout << "The distance from Chicago to " << trip.getDestination() << " is "
<< trip.getDistance() << endl;
trip.setRate();
cout << "The speed you will be travelling at from Chicago to "
<< trip.getDestination() << " is " << trip.getRate() << endl;
trip.calculateTime();
cout << "The time it will take to travel from Chicago to "
<< trip.getDestination() << " at " << trip.getRate()
<< " miles per hour will be:\n " << trip.getTime() << " hours."
<< endl;
}
}
问题在于输出。即使if语句有条件,如果选项不是11,该函数仍会打印“程序终止”。我如何解决这个问题,如果选择= 11,程序终止,如果选择不是11,它会继续并一次又一次地遍历各种函数,直到选择为11?
答案 0 :(得分:3)
你想要choice == 11
。单个=
符号会将11分配给选择(并且该分配的计算结果为true)。
答案 1 :(得分:1)
您需要使用==
来比较相等性; =
是赋值,返回赋值,非零则被解释为true。
我见过试图阻止这个问题的一个约定是将常量放在左边。以下代码块将产生编译器错误:
if(11 = choice)
{
cout << "Program terminated." << endl;
break;
}
答案 2 :(得分:0)
if(choice = 11)
表示您为choice
赋值11
,并测试值是否为非零,这是真的。它应该是
if(choice == 11)
答案 3 :(得分:0)
格式正确
if(choice == 11) {
--- }
=
用于分配,==
用于检查相等性。
此外,您必须在while
语句末尾给出do
条件,以检查条件是否再次进入循环。
答案 4 :(得分:0)
if(choice = 13){......}
表达式为真,赋值表达式值为var的值,上面是选择,赋值表达式为13,13为真。
你可以写13 =选择保护错误的编译器,但我建议你写选择== 13种方法,因为这种方式会很好理解。