2016-07-07 2 views
-3

У меня проблемы с раздражением. Проблема, с которой я сталкиваюсь; когда я вхожу в -1 в первый cin >> statement, время не выходит, как я хочу.Быстрые вопросы. У меня проблемы с моей петлей «Пока»

Я стараюсь не использовать "break" в цикле, потому что мне сообщили о его дурной привычке.

FYI moveOn инициализируется значением true. Вот код:

while(moveOn){ 

cout << "Enter info:"; 
cin >> weight; 
if(weight == -1){ 
    moveOn = false; 
} 

weight = pack.weight; 
cin >> pack.sides[0] >> pack.sides[1] >> pack.sides[2]; 

    while(pack.weight > 0 || pack.sides[0] < 0 || pack.sides[1] < 0 || pack.sides[2] < 0){ 
     cout << "Enter Vaild info:"; 
     cin >> pack.weight >> pack.sides[0] >> pack.sides[1] >> pack.sides[2]; 
    } 

girth = getGirth(pack.sides); 
float price; 
price = getPackageAmount(pack.weight, weights, prices); 
cout << price << endl; 

if(pack.weight <= 50){ 
    if(pack.sides[0] <= 36 && pack.sides[1] <= 36 && pack.sides[2] <= 36){ 
     if(girth <= 60){ 
      pack.accepted = true; 
      accepted++; 
     } 
    } 
} 
else{ 
    pack.accepted = false; 
    rejected++; 

} 
} 

Спасибо заранее.

+0

Использование 'продолжать;' или 'else' положение. – MikeCAT

+0

'weight = pack.weight;' должно быть, должно быть 'pack.weight = weight;'. Вероятно, поэтому это не работает. –

+0

«пока не выходит, как я хочу» - как это все? вы хотите, чтобы он «ломал» сразу? потому что, если это так, у вас все еще есть все приведенные ниже инструкции, которые будут выполнены, и в этом случае вы могли бы следовать советам @MikeCAT. –

ответ

3

while(moveOn) не означает «немедленно остановиться, когда moveOn будет false» - тест выполняется только в начале каждой итерации цикла.

Вы должны добавить else пункт:

while (moveOn) 
{ 
    cout << "Enter info:"; 
    cin >> weight; 
    if(weight == -1){ 
     moveOn = false; 
    } 
    else 
    { 
     weight = pack.weight; 
     // ... 
    } 
} 

(Вы, вероятно, также необходимо изменить weight = pack.weight к pack.weight = weight.)

+0

Так что, в основном, выкинуть остальную часть кода в оператор else? Поправьте меня, если я не пойму вас правильно. –

+0

Операция else работала –

+0

@MichaelCorbett Точно. (Я лично считаю, что 'break' отлично подходит и читается в этом случае.) – molbdnilo

Смежные вопросы