简单的游戏,同时循环和检查字符串

时间:2019-03-14 08:43:04

标签: c++ iterator do-while

我是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 个答案:

答案 0 :(得分:4)

您似乎对操作员有误解。 <<未分配,请使用=。因此,tocke << 0;不会将0分配给tocke,它会进行移位(在未初始化的变量上),然后丢弃结果。 tocke保持未初始化状态,这稍后会导致问题。

代替此:

tocke << 0;
cas << 0;

执行此操作:

tocke = 0;
cas = 0;

也代替cas << cas + 1;cas++,代替tocke << tocke - 2;tocke -= 2;。要了解赋值运算符的工作方式,您可以阅读有关here的信息。最后但并非最不重要的一点是,尝试查看编译器是否向您发出任何警告,它应该抱怨使用未初始化的值。