我是c++的初学者,我想创建简单的游戏。您具有字符串 vector ,然后检查线路输入是否匹配正确的答案。

我想生成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" ;
    
    }
    

    最佳答案

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

    代替这个:

    tocke << 0;
    cas << 0;
    

    做这个:
    tocke = 0;
    cas = 0;
    

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

    10-06 08:53