простая игра, в то время как цикл и проверка строк - PullRequest
1 голос
/ 14 марта 2019

Я новичок в C ++ и хочу создать простую игру. У вас есть вектор строк, затем вы проверяете, соответствует ли ввод строки правильному ответу.

Я хочу сгенерировать случайное число 1, 2 или 3. Затем проверьте соответствие строки правильному ответу и подсчитайте баллы.

Возможно, мне не хватает чего-то простого, но я не знаю, что.

Проблемы:

  • Строка ввода корректно читается только на первых итерациях

  • каким-то образом указывает (tocke) прыжки до 45763 после окончания.

  • В начале время (cas) иногда равно 2.

Код:

#include <iostream>
#include <vector>
#include <stdlib.h> 
#include <time.h>
#include <string>



int main() {
    int runde;
    int tocke;
    int cas;
    std::cout <<  "\n" << "Pravila igre:" << "\n" << "Za pravilen odgovor dobis 1 tocko, za napacnega zgubis 2!"<<
      "\n" << "Stevilo zivljenj si izberes sama!"<< "\n" << "\n" ;
    std::cout << "Izberi stevilo zivljenj!:" << "\n";
    std::cin >> runde ;
    std::vector<std::string> latin = {"carum carvi", "artemisia absiinthium","coriandrum sativum"};
    std::vector<std::string> slovene = {"navadna kumina", "pravi pelin", "koriander"};
    tocke << 0;
    cas << 0;

    do {
        int ind;
        cas << cas + 1;
        std::cout << "Round  " << cas  <<"! Ladies and gentlemans, buckle your seatbelts!"<<"\n" << "\n" ;
        ind = std::rand() % 3;
        std::cout << "ime rastline: " << slovene[ind] << "\n";
        std::cin.ignore();
        std::string line;
        getline(std::cin, line);
        std::cout << "\n";
        if (latin[ind] == line){
            std::cout << "Pravlino! Tocka zate!" << "\n"; 
            tocke << tocke + 1;
            std::cout << "Tocke == " << tocke << "\n" << "Zivjenja == " << runde << "\n" << "Prezivete runde == " << cas << "\n"<< "\n";
        }
        else
        {
            std::cout << "Napaka! :D" << "\n";
            std::cout << "Pravilen odgovor == " << latin[ind] << "\n";
            -- runde ;
            tocke << tocke - 2;
            std::cout << "Tocke == " << tocke << "\n" << "Zivjenja == " << runde << "\n"  << "Prezivete runde == " << cas << "\n"<< "\n";
        }        
    }while(runde >= 0 );  
    std::cout << "\n"<<"Stevilo tock == " << tocke <<"\n" << "St. prezivetih rund == " << cas - 1
    << "\n" ;

}

1 Ответ

4 голосов
/ 14 марта 2019

У вас неправильное представление об операторах.<< НЕ является назначением, используйте = вместо этого.Таким образом, tocke << 0; не присваивает 0 tocke, он выполняет сдвиг битов (для неинициализированной переменной), а затем отбрасывает результат.tocke остается неинициализированным, и это вызывает проблемы позже.

Вместо этого:

tocke << 0;
cas << 0;

Сделайте это:

tocke = 0;
cas = 0;

Также вместо cas << cas + 1; do cas++ и вместо tocke << tocke - 2; do tocke -= 2;.Чтобы узнать, как работают операторы присваивания, вы можете прочитать о них здесь .И последнее, но не менее важное: попытайтесь выяснить, предупреждает ли ваш компилятор о каких-либо предупреждениях, он должен жаловаться на использование неинициализированных значений.

...