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

问题描述 投票:1回答:1

我是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" ;

}
c++ iterator do-while
1个回答
4
投票

你似乎对运营商存在误解。 <<不是作业,而是使用=。所以tocke << 0;不会将0分配给tocke,它会进行位移(在未初始化的变量上),然后丢弃结果。 tocke保持未初始化,这会导致以后出现问题。

而不是这个:

tocke << 0;
cas << 0;

做这个:

tocke = 0;
cas = 0;

而不是cas << cas + 1;cas++而不是tocke << tocke - 2;tocke -= 2;。要了解赋值运算符的工作原理,您可以阅读它们here。最后但并非最不重要的是,尝试看看你的编译器是否给你任何警告,它应该抱怨使用未初始化的值。

© www.soinside.com 2019 - 2024. All rights reserved.