我是c ++的初学者,我想创建简单的游戏。您具有字符串向量,然后检查线路输入是否匹配正确的答案。
我想生成1,2或3的随机数。然后检查线是否与正确答案匹配并计算分数。
我可能缺少一些基本知识,但我不知道是什么。
问题:
仅在第一次迭代中正确读取输入行
完成后,点数(tocke)跳至45763。
代码:
#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" ;
}
答案 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的信息。最后但并非最不重要的一点是,尝试查看编译器是否向您发出任何警告,它应该抱怨使用未初始化的值。