#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. Так это делается в варварских землях С, где нет такой роскоши, как std::string.
Либо используйте цикл и сравнивайте строки посимвольно, но в этом мало смысла, ведь strcmp уже делает то же самое.
Понимаете, сравнение переменных типа
char str[];
или
char * str;
со строковым литералом (или между собой - неважно)
str == "String"
сравнивает два указателя - str и указатель на строковый литерал, но не содержимое строк. Очевидно, что это два разных указателя, и такое сравнение всегда ложно.
Строки в стиле C сравниваются с помощью функции strcmp. С помощью оператора == можно сравнивать содержимое строк типа string (но это не ваш случай, если только вы не выполните преобразование в string...).
Сборка персонального компьютера от Artline: умный выбор для современных пользователей