我是c++的初学者,我想创建简单的游戏。您具有字符串 vector ,然后检查线路输入是否匹配正确的答案。
我想生成1、2或3的随机数。然后检查线是否与正确答案匹配并计算分数。
我可能缺少一些基本知识,但我不知道该怎么做。
问题:
码:
#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。最后但并非最不重要的一点是,尝试查看编译器是否向您发出任何警告,它应该抱怨使用未初始化的值。