2016-10-09 1 views
-1

Когда я вхожу в строку «NOMORE», она продолжает следующую строку, где он спрашивает меня о скорости автомобиля. Он останавливает петли только при завершении цикла for. Как я могу сделать это так, чтобы он немедленно прекращался, когда вводится «NOMORE»? Спасибо за любую помощь. Я действительно ценю это. И жаль тратить свое время, если я сделал :(Почему мой циферблат C++ продолжается после того, как введено заданное значение?

#include <iostream> 
#include <string> 
#include <iomanip> 

using namespace std; 

int main() 
{ 
    string plate; 
    int totalCount; 
    int ticketCount = 0; 
    double speed; 
    double base = 150; 
    double limit; 
    double ticket; 
    double overspeed; 

    for (totalCount = 0; plate != "NOMORE"; totalCount++) 
    { 
     cout << "Enter a license plate number --> "; 
     cin >> plate; 
     cout << "Enter current vehicle's speed --> "; 
     cin >> speed; 
     cout << "Enter speed limit in the zone --> "; 
     cin >> limit; 

     overspeed = speed - limit; 

     if (overspeed >= 5 && overspeed <= 20) 
     { 
      ticket = base + 5 * overspeed; 
      cout << "A ticket of " << setprecision(2) << fixed << ticket << " is issued to " << plate << "\n\n"; 

      ticketCount++; 
     } 
     else if (overspeed > 20 && overspeed <= 50) 
     { 
      ticket = base + 10 * overspeed; 
      cout << "A ticket of " << setprecision(2) << fixed << ticket << " is issued to " << plate << "\n\n"; 

      ticketCount++; 
     } 
     else if (overspeed > 50) 
     { 
      ticket = base + 1000 + (10 * overspeed); 
      cout << "A ticket of " << setprecision(2) << fixed << ticket << " is issued to " << plate << "\n\n"; 

      ticketCount++; 
     } 
     else 
      cout << "No ticket is issued to " << plate << ".\n\n"; 
    } 

    cout << ticketCount << " out of " << totalCount << " times\n"; 

    return 0; 
} 
+4

'CIN >> пластины; если (пластинчатый == "NOMORE") перерыв;' –

+2

Причина, почему ваш цикл делает это, потому что это то, что вы написали для своей программы. –

+0

Значит ли это, что мне тогда не нужен дозорный? – vincelam1998

ответ

1

Как комментировал @IgorTandetnik, добавьте это право после получения пользовательского ввода:

cout << "Enter a license plate number --> "; 
cin >> plate; 
if (plate == "NOMORE") break; // add this 
cout << "Enter current vehicle's speed --> "; 
... 

условия в for цикле проверяются только между . итерации, а не после каждой инструкции этой блок-схема подводит итог, как они ведут себя:

For loop flowchart

+0

Должен был побудить Игоря опубликовать ответ, просто перефразируя свой комментарий ИМО. – StoryTeller

+0

Я думаю, вы правы, хотя я собирался предоставить тот же ответ в любом случае. Плюс я добавил объяснение – qxz

+0

спасибо и спасибо @Igor Tandetnik – vincelam1998