-1

我正在做一个函数来给出从芝加哥到某个城市的旅行时间。我试图让它循环,以便当用户选择城市时,它会给出所花费的时间并循环回来询问主要问题并让用户选择另一个城市。我还包括一个他们可以退出循环的选项。我到目前为止是这样的:

    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,该函数仍会打印“程序终止。”。我该如何解决这个问题,以便如果choice = 11,程序终止,如果choice 不是11,它会继续并一次又一次地遍历各种函数,直到choice 被选为11?

4

5 回答 5

3

你想要choice == 11。单个=符号会导致将 11 分配给选择(并且该分配的计算结果为真)。

于 2013-07-10T01:16:20.500 回答
1

您需要使用==来比较是否相等;=是赋值,返回赋值,非零被解释为真。

我见过的一个试图防止这个问题的约定是将常量放在左边。以下代码块将产生编译器错误:

      if(11 = choice)
        {
          cout << "Program terminated." << endl;
          break;
        }
于 2013-07-10T01:17:43.127 回答
0
if(choice = 11)

表示您分配choice的值11,并测试该值是否为非零,即为真。它应该是

if(choice == 11)
于 2013-07-10T01:16:53.373 回答
0

正确的格式是

if(choice == 11) {
--- }

=用于赋值,==用于检查相等性。

此外,您必须在语句while末尾给出一个条件,do以检查再次进入循环的条件。

于 2013-07-10T01:17:47.063 回答
0

如果(选择 = 13){......}

表达式永远为真,赋值表达式值为var的值,上面是choice,赋值表达式为13,13为真。

您可以编写 13 = 选择以保护编译器的错误,但我建议您编写选择 == 13 方式,因为这种方式会很好理解。

于 2013-07-10T01:37:59.397 回答