2017-02-14 22 views
1

я в настоящее время путаю на то время петли, в частности, почему цикл до сих пор работает все остальное в цикле конкретно после того, как значение сторожевого достигаются ...в то время как цикл продолжается после того, как значение сторожевого достигается

вот пример моих код ниже:

while (quit != -1) { 
cout<<"Options: a)ir; w)ater; s)teel; q)uit \n"; 
char option=' '; 
cin>>option; 
option = toupper(option); 
while(option != 'A' && option != 'W' && option != 'S' && option != 'Q'){ 
    cin.clear(); 
    cout<<"INVALID INPUT!! \n"; 
    cin>>option; 
    option = toupper(option); 
    } 
    switch(option){ 
     case 'Q': 
      cout<<"You Have Quit!"; 
      quit = -1; 
      break; 
    } 
    cout<<"Please input the distance: \n"; 
    double distance=0; 
    cin>>distance; 
     while(distance < 0){ 
      cin.clear(); 
      cout<<"INVALID INPUT \n"; 
      cin>>distance; 
     } 
    switch(option){ 
     case 'A': 
      seconds = distance/speed_a; 
      cout<< "Time travled: " << setprecision(2) << fixed << seconds << "\n"; 
      break; 
     case 'W': 
      seconds = distance/speed_w; 
      cout<< "Time travled: " << setprecision(2) << fixed << seconds << "\n"; 
      break; 
     case 'S': 
      seconds = distance/speed_s; 
      cout<< "Time travled: " << setprecision(2) << fixed << seconds << "\n"; 
      break; 
    } 
} 

в основном, когда пользователь вводит символ «Q» он запускает бросить курить заявление переключателя ... он ушел из цикла, но она по-прежнему запрашивает расстояние, пройденное до окончания цикла ..

вывод показан ниже:

Options: a)ir; w)ater; s)teel; q)uit 
    q 
    You Have Quit! 
    Please input the distance: 
    0 

    -------------------------------- 
    Process exited after 2.944 seconds with return value 0 
    Press any key to continue . . . 

можно ли каким-либо образом отредактировать код, чтобы он сразу же вышел из цикла или это так, как все петли запрограммированы заранее?

любые советы будут оценены

+0

Разрыв внутри коммутатора прерывает только выключатель, а не цикл while. вы должны либо использовать, чтобы проверить или завершить тест после блока переключателя. – Shiping

ответ

1

Оператор пролома внутри корпуса выключателя только выходит из блока переключателя, а не внешнее время цикла. Ваш код продолжает работать до следующей оценки состояния цикла while.