C++ switch语句和while循环的无限循环问题

huangapple go评论83阅读模式
英文:

C++ switch while infinite loop issue

问题

以下是您提供的C++代码的翻译部分:

#include <iostream>
#include <iomanip>
#include <locale>
using namespace std;

struct {
    string Route;
    string depTime;
    string travelTime;
    string endDestTime;
} Schedule1, Schedule2, Schedule3;

int main()
{
    setlocale(LC_ALL, "RUSSIAN");
    int routeNum = 3;
    bool quit = false;
    
    Schedule1.Route = "Ярославль--Москва"; // маршрут 
    Schedule1.depTime = "12.06.2023, 13:00"; // время отправления
    Schedule1.travelTime = "4 часа"; // время в пути
    Schedule1.endDestTime = "12.06.2023, 17:00"; // время прибытия
    
    Schedule2.Route = "Ярославль--Санкт-Петербург";
    Schedule2.depTime = "12.06.2023, 16:00";
    Schedule2.travelTime = "10 часов";
    Schedule2.endDestTime = "13.06.2023, 02:00";
    
    Schedule3.Route = "Ярославль--Екатеринбург";
    Schedule3.depTime = "12.06.2023, 12:00";
    Schedule3.travelTime = "20 часов";
    Schedule3.endDestTime = "13.06.2023, 08:00";
  
    // выбор маршрута поезда
    cout << "|----------------Расписание поездов-----------------| \n\n";
    cout << "Город отправления:     Город прибытия: \n";
    cout << "(1)  Ярославль         Москва \n";
    cout << "(2)  Ярославль         Санкт-Петербург \n";
    cout << "(3)  Ярославль         Екатеринбург \n";
    cout << "(4)  Завершить" << endl;
    cout << "Выберите номер маршрута: ";
    cin >> routeNum;

    do
    {
        switch (routeNum)
        {
            case 1:
                cout << "Маршрут: " << Schedule1.Route << " " << endl;
                cout << "Время отправления: " << Schedule1.depTime << " " << endl;
                cout << "Время в прибытия: " <<  Schedule1.endDestTime << " " <<endl;
                cout << "Время в пути: " << Schedule1.travelTime << " " <<endl;
                cout << endl;
                break;
                
            case 2:
                cout << "Маршрут: " << Schedule2.Route << " " << endl;
                cout << "Время отправления: " << Schedule2.depTime << " " << endl;
                cout << "Время в прибытия: " <<  Schedule2.endDestTime << " " <<endl;
                cout << "Время в пути: " << Schedule2.travelTime << " " <<endl;
                cout << endl;
                break;
                
            case 3:
                cout << "Маршрут: " << Schedule3.Route << " " << endl;
                cout << "Время отправления: " << Schedule3.depTime << " " << endl;
                cout << "Время в прибытия: " <<  Schedule3.endDestTime << " " <<endl;
                cout << "Время в пути: " << Schedule3.travelTime << " " <<endl;
                cout << endl;
                break;
                
            case 4:
                quit = true; // завершить программу
                break;
                
            default:
                cout << "Выберите существующий номер маршрута"; // если введен некорректный ввод
        }
    }
    while(!quit);

    return 0;
}

这是您的C++代码的翻译部分。如果您需要更多帮助,请随时提出具体问题。

英文:

I'm a total beginner at C++ and I'm trying to make a program which displays train schedule by selecting routes from the menu. I also want to make it possible to choose multiple options and quit manually. The issue is: every input creates an infinite loop.

#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;locale&gt;
using namespace std;
struct {
string Route;
string depTime;
string travelTime;
string endDestTime;
} Schedule1, Schedule2, Schedule3;
int main()
{
setlocale(LC_ALL, &quot;RUSSIAN&quot;);
int routeNum = 3;
bool quit = false;
Schedule1.Route = &quot;Ярославль--Москва&quot;; //route 
Schedule1.depTime = &quot;12.06.2023, 13:00&quot;; //departure time
Schedule1.travelTime = &quot;4 часа&quot;; //travel time
Schedule1.endDestTime = &quot;12.06.2023, 17:00&quot;; //destination time
Schedule2.Route = &quot;Ярославль--Санкт-Петербург&quot;;
Schedule2.depTime = &quot;12.06.2023, 16:00&quot;;
Schedule2.travelTime = &quot;10 часов&quot;;
Schedule2.endDestTime = &quot;13.06.2023, 02:00&quot;;
Schedule3.Route = &quot;Ярославль--Екатеринбург&quot;;
Schedule3.depTime = &quot;12.06.2023, 12:00&quot;;
Schedule3.travelTime = &quot;20 часов&quot;;
Schedule3.endDestTime = &quot;13.06.2023, 08:00&quot;;
//train routes to choose from
cout&lt;&lt;&quot;|----------------Расписание поездов-----------------| \n\n&quot;;
cout&lt;&lt;&quot;Город отправления:     Город прибытия: \n&quot;;
cout&lt;&lt;&quot;(1)  Ярославль         Москва \n&quot;;
cout&lt;&lt;&quot;(2)  Ярославль         Санкт-Петербург \n&quot;;
cout&lt;&lt;&quot;(3)  Ярославль         Екатеринбург \n&quot;;
cout&lt;&lt;&quot;(4)  Завершить&quot; &lt;&lt; endl;
cout&lt;&lt;&quot;Выберите номер маршрута: &quot;;
cin &gt;&gt; routeNum;
do
{
switch (routeNum)
{
case 1:
cout &lt;&lt; &quot;Маршрут: &quot; &lt;&lt; Schedule1.Route &lt;&lt; &quot; &quot; &lt;&lt; endl;
cout &lt;&lt; &quot;Время отправления: &quot; &lt;&lt; Schedule1.depTime &lt;&lt; &quot; &quot; &lt;&lt; endl;
cout &lt;&lt; &quot;Время в прибытия: &quot; &lt;&lt;  Schedule1.endDestTime &lt;&lt; &quot; &quot; &lt;&lt;endl;
cout &lt;&lt; &quot;Время в пути: &quot; &lt;&lt; Schedule1.travelTime &lt;&lt; &quot; &quot; &lt;&lt;endl;
cout&lt;&lt;endl;
break;
case 2:
cout &lt;&lt; &quot;Маршрут: &quot; &lt;&lt; Schedule2.Route &lt;&lt; &quot; &quot; &lt;&lt; endl;
cout &lt;&lt; &quot;Время отправления: &quot; &lt;&lt; Schedule2.depTime &lt;&lt; &quot; &quot; &lt;&lt; endl;
cout &lt;&lt; &quot;Время в прибытия: &quot; &lt;&lt;  Schedule2.endDestTime &lt;&lt; &quot; &quot; &lt;&lt;endl;
cout &lt;&lt; &quot;Время в пути: &quot; &lt;&lt; Schedule2.travelTime &lt;&lt; &quot; &quot; &lt;&lt;endl;
cout&lt;&lt;endl;
break;
case 3:
cout &lt;&lt; &quot;Маршрут: &quot; &lt;&lt; Schedule3.Route &lt;&lt; &quot; &quot; &lt;&lt; endl;
cout &lt;&lt; &quot;Время отправления: &quot; &lt;&lt; Schedule3.depTime &lt;&lt; &quot; &quot; &lt;&lt; endl;
cout &lt;&lt; &quot;Время в прибытия: &quot; &lt;&lt;  Schedule3.endDestTime &lt;&lt; &quot; &quot; &lt;&lt;endl;
cout &lt;&lt; &quot;Время в пути: &quot; &lt;&lt; Schedule3.travelTime &lt;&lt; &quot; &quot; &lt;&lt;endl;
cout&lt;&lt;endl;
break;
case 4:
quit = true; //quit program
break;
default:
cout &lt;&lt; &quot;Выберите существующий номер маршрута&quot;; //if input is invalid
} 
}
while(!quit);
return 0;
}

I know same issue has been brought before but I still can't figure out what I'm missing here. Any help would be greatly appreciated.

答案1

得分: 1

以下是翻译好的部分:

至少这个语句

cin &gt;&gt; routeNum;

应该在do-while循环内,例如

do
{
cin &gt;&gt; routeNum;
switch (routeNum)
{
//...

否则,变量routeNum在循环内不会被改变。因此,您将会得到一个无限循环。

英文:

At least this statement

cin &gt;&gt; routeNum;

should be within the do-while loop as for example

do
{
cin &gt;&gt; routeNum;
switch (routeNum)
{
//...

Otherwise the variable routeNum is not being changed within the loop. As a result you have an infinite loop.

huangapple
  • 本文由 发表于 2023年5月22日 07:02:44
  • 转载请务必保留本文链接:https://go.coder-hub.com/76302263.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定