#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
int hp=100;
char start[20];
void draw() {
system("color 7");
}
void enter_start(){
cout <<"Добро пожаловать в CPP Wars!" <<endl;
cout <<"Введите 'Start' для начала игры" <<endl;
cin >>start;
cout <<"Начинаем игру!" <<endl;
system("cls");
}
void game(){
cout <<"У вас " <<hp <<" делаем ход" <<endl;
if (rand()% 2 == 0) {
system("color a");
cout <<"Вас ударили -1 hp!" <<endl;
hp-=1;
Sleep(2000);
system("cls");
}
else {
system("color c");
cout <<"Вы восстановили силы +1 hp" <<endl;
hp+=1;
Sleep(2000);
system("cls");
}
}
void check(){
if (start=="Start") {
game();
}
else {
cout <<"Команда введена не верно! Повторите попытку " <<start <<endl;
}
}
int main() {
setlocale(LC_ALL, "Russian");
while(hp > 0){
draw();
enter_start();
check();
}
system ("color 4");
cout <<"Игра окончена" <<endl;
cout <<"Вы умерли..." <<endl;
return 0;
}
check()
由于某种原因,该功能不起作用,当您输入"Start"
它时,它仍然显示一条消息,指出"Команда введена не верно!"
我无法理解我在哪里出错了,请求您的帮助!
通过指针比较字符串的经典方法。
您
==
比较的不是行的内容,而是它们的地址。由于这是两个单独的字符串,地址总是不同的,并且总是返回false
。C++ 中不习惯使用字符数组来存储字符串(不必要地)。有这个
std::string
。替换
char start[20];
为std::string start;
,一切都会奏效。不要忘记添加#include <string>
.(既然有了
using namespace std;
,那string start;
也行。但是using namespace std;
——东西不太好,劝你拒绝。)此外,这解决了键入的字符多于数组中的空格的问题。
std::string
本身会伸展到所需的大小,超出范围char name[20];
会导致未定义的行为,并且很可能会导致崩溃。如果您坚持使用
char name[20]
,则要将其与另一个字符串进行比较,请使用std::strcmp
. 这就是在蛮荒之地C 的做法,那里没有std::string
.或者使用循环并逐个字符地比较字符串,但这没什么意义,因为它
strcmp
已经做了同样的事情。你看,比较类型变量
或者
带有字符串文字(或彼此之间 - 没关系)
比较两个指针-
str
和一个指向字符串文字的指针,但不比较字符串的内容。显然,这是两个不同的指针,这样的比较总是错误的。C 风格的字符串使用
strcmp
. 您可以使用运算符==
来比较类型字符串的内容string
(但这不是您的情况,除非您转换为string
...)。