#c #string #if-statement #strcat #cmath
Вопрос:
Я пытаюсь создать базовую игру в стиле «выбери свое приключение», разработав базовую систему, с помощью которой программа принимает ввод пользовательских символов и принимает решение, используя операторы if-else для добавления строк в определенном шаблоне. В следующей программе я попытался использовать strcat после набора условий, чтобы получить другой результат, но мои результаты продолжают с треском проваливаться. Любая помощь, которую кто-то мог бы предложить, была бы невероятной.
#include <iostream>
#include<cstring>
#include<string>
#include<iomanip>
#include<ios>
#include<limits>
using namespace std;
int main()
{
char str1[50]= "F*ck";
char str2[50]= "You";
char str3[50]= "Me";
char answer[50];
cout<< "Do you like rock music yes or no?";
cin>> answer;
if (answer== "no"){
cout<< strcat(str1,str2);
} else (answer== "yes");{
cout<< strcat(str1,str3);
}
return 0;
}
Ответ №1:
Вы не можете сравнивать содержимое строк в стиле C с помощью operator==
. Вам нужно использовать strcmp()
вместо этого:
if (strcmp(answer, "no") == 0)
Кроме того, else (answer== "yes");{
это тоже неправильно. Не только из-за проблемы с сравнением, но и из-за того , что у вас отсутствует требуемое if
и есть ошибочное ;
. Так и должно быть else if (strcmp(answer, "yes") == 0){
вместо этого.
Это, как говорится , вы действительно должны использовать std::string
вместо char[]
, например:
#include <iostream>
#include <string>
using namespace std;
int main() {
const string str1 = "F*ck";
const string str2 = "You";
const string str3 = "Me";
string answer;
cout << "Do you like rock music yes or no?";
cin >> answer;
if (answer == "no"){
cout << str1 << str2;
} else if (answer == "yes"){
cout << str1 << str3;
}
return 0;
}
Ответ №2:
Когда вы используете ==
оператор для сравнения строк в стиле C, вы на самом деле сравниваете адреса, а не содержимое строк, что в данном случае бесполезно. Попробуйте strcmp()
вместо этого использовать библиотечную процедуру, и вы, вероятно, продвинетесь намного дальше в том, что пытаетесь сделать.
Ответ №3:
if (answer== "no")
Вы сравниваете адрес памяти answer
и строковый литерал "no"
, так что это условие false
Вы должны использовать strcmp()
вот так:
if(strcmp(answer, "no") == 0)
Кроме того, else
у вас неправильный синтаксис. Вы должны использовать else if
Измените это на:
else if (strcmp(answer, "yes") == 0)
{
std::cout<< strcat(str1,str3);
}
Или еще лучше, выбросьте строку в стиле C из окна и используйте std::string
вместо этого.
#include <iostream>
#include <cstring>
#include <string>
#include <iomanip>
#include <ios>
#include <limits>
// using namespace std; is bad
int main()
{
std::string str1{"F*ck"};
std::string str2{"You"};
std::string str3{"Me"};
std::string answer;
std::cout<< "Do you like rock music yes or no?";
std::cin>> answer;
if (answer == "no")
{
std::cout<< (str1 str2);
}
else if(answer == "yes")
{
std::cout << (str1 str3);
}
return 0;
}
Ответ №4:
Я смог переписать программу, и теперь она работает. Будет очень полезно для текстовой игры «Выбери свою собственную приключенческую игру». Новая программа выглядит следующим образом:
#include <iostream>
#include<cstring>
#include<string>
using namespace std;
int main() {
char str1[50]= "F*ck";
char str2[50]= " You";
char str3[50]= " Me";
char answer[50];
cout<< "Do you like rock music (yes or no)?"<<endl;
cin>> answer;
if (strcasecmp(answer,"no") == 0){
cout<< strcat(str1,str2)<<endl;
} else if (strcasecmp(answer,"yes") == 0){
cout<< strcat(str1,str3)<<endl;
} else {
cout<< strcat(str1," off")<<endl;
}
return 0;
}