Как я могу использовать strcat() в операторе if-else для изменения на основе ввода пользователем «да» или «нет»?

#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;
}