2015-08-11 2 views
-3

Как использовать операторы if и else внутри while циклов в C++? Я не уверен, что я делаю неправильно. Я думаю, что это может иметь какое-то отношение к переменным float, или, может быть, именно здесь код после цикла while.Как использовать инструкции if и else внутри циклов while

#include <string> 
#include <iostream> 

int main(int argc, char* argv[]) 
{ 
    float FEnemyPos[3] = { 15.1f, 30.1f, 50.1f }; 

    char cEnemyTypes[3][10] = { "Trolls", "skeletons", "Axemen" }; 

    float fPlayerPos = 20; 
    float fPlayerMoves; 

    float Ftrolldistance; 
    float Fskeledistance; 
    float Faxemendistance; 
    float fValueEntered = 0; 

    std::cout << "Please enter number \t"; 
    while (fValueEntered != -99) { 
     std::cout << "Please enter number \t"; 
     std::cin >> fPlayerMoves; 

     fValueEntered = fValueEntered + fPlayerMoves; 

     fPlayerPos = fPlayerMoves + fPlayerPos;//player position 

     std::cout << "value entered" << fValueEntered; 
     std::cout << "player pos" << fPlayerPos; 

     Ftrolldistance = FEnemyPos[1] - fPlayerPos; 
     Fskeledistance = FEnemyPos[2] - fPlayerPos; 
     Faxemendistance = FEnemyPos[3] - fPlayerPos; 

     std::cout << "troll distance " << Ftrolldistance; 


     if (Ftrolldistance <= 2 && Ftrolldistance >= -2) //if troll is less <2 and more then -2, 
     { 
      std::cout << "trolls are close";//print you are in danger 
     } 

     else if (Fskeledistance <= 2 && Fskeledistance >= -2)//if skelle is less <2 and more then - 2, 
     { 
      std::cout << "skelle are close ";//print you are in danger 
     } 

     else if (Faxemandistance <= 2 && Faxemendistance >= -2)//if axemen is less <2 and more then - 2, 
     { 
      std::cout << "axemen are close";//print you are in danger 
     } 


     else 
     { 
      std::cout << "you are safe for now \t";//else print you are safe 
     } 
    } 
} 
+5

Слишком много кода, плохо объясняемая проблема (на самом деле .. что такое _is_ проблема?), выложил код C++ в виде встроенного исполняемого фрагмента HTML/JS (wtf?) ... –

+1

О, и не используйте «n слово» на стеке Переполнение. Или вообще. Благодарю. –

+0

извините, я не опубликовал его в правильном формате, но все еще новенький, и его беспорядочный ive просто пытался заставить эту вещь работать целую вечность, извините за использование n слова lol, я забыл, что там не было, но его явно не использовали в из-за моего словарного запаса, потому что я слушаю много рэп-музыки, извините, если я оскорбил кого-нибудь этим =) –

ответ

-1

Плохое качество код, вы слышали о кода стиля? комментарии? Вы запустили код? Я дам вам совет после написания фрагмента кода, прежде чем компилировать его, прочитав его снизу вверх, он поможет вам обнаружить такие проблемы, как этот: Первый индекс массива всегда 0 !!! поэтому третье значение в массиве имеет 2 как индекс => так что технически:

Faxemendistance = FEnemyPos[3] - fPlayerPos; 

будет генерировать ошибку. Чтобы исправить это, вы должны написать:

Ftrolldistance = FEnemyPos[0] - fPlayerPos; 
Fskeledistance = FEnemyPos[1] - fPlayerPos; 
Faxemendistance = FEnemyPos[2] - fPlayerPos; 
+0

слишком правдивый, я забыл об этом = P, и я попробую прочитать, бросил его так же, это имеет смысл –

+0

Почему ты кричишь**? –

+0

me ?? если его другой парень, который кричит, пытаясь помочь мне, я не забочусь, по крайней мере, он пытается помочь мне, в отличие от других людей, кашляет легкомысленные гонки –

1

Слишком много коды, но я узнал один вопрос ... Вашего массив из 3 членов.

float FEnemyPos[3] = { 15.1f, 30.1f, 50.1f }; но вы используете его из индекса 1 и собирается ДО индекса 3.

Ftrolldistance = FEnemyPos[1] - fPlayerPos; 
Fskeledistance = FEnemyPos[2] - fPlayerPos; 
Faxemendistance = FEnemyPos[3] - fPlayerPos; 

Вы должны изменить его, как показано ниже, потому что вы не имеете ничего в вас массиве по индексу 3, он является недействительным доступ к памяти при попытке получить к нему доступ.

Ftrolldistance = FEnemyPos[0] - fPlayerPos; 
Fskeledistance = FEnemyPos[1] - fPlayerPos; 
Faxemendistance = FEnemyPos[2] - fPlayerPos; 
0

Вы могли бы сократить код очень много!

  • вы можете использовать список строк, а не массив символов
  • вы могли бы использовать меньше переменных
  • КРП/еще можно было бы сократить

также основная проблема заключается в том, что индекс всегда начинается с 0

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