иначе-если бы только выдав ответ "если" - PullRequest
1 голос
/ 09 февраля 2020

Я работаю над проектом для моего класса информатики. Мы должны сделать текстовую приключенческую игру. Я получил почти все это на работу, за исключением l oop в конце. Оператор if работает нормально, но оператор else if только выводит ответ на оператор if, а не отдельный оператор, который я написал для него. Я пробовал много разных способов написания этого, но, честно говоря, не вижу проблемы. Я включу весь код на случай, если есть проблема где-то за пределами l oop.

#include <stdio.h>
int main() {
    char name[1024];
    char kname[1024];
    char response[1024];
    printf("Wanna play a game? First, I need your name.\n");
    scanf("%s", name);
    printf("Your name is %s, huh? I like it.\n", name);
    printf("Let's get started. You're in the woods. You come across a cat, now you need to name them.\n");
    scanf("%s", kname);
    printf("So, you decided to name them %s? Not what I would've picked, but it's not my pet.\n", kname);
    printf("You come across a plague doctor. Is that why you came into the woods, to get away from the sickness? Not exactly brave. Anyway, I digress. The plague doctor promises the impossible, tells you that he can and will make you immune with an elixir. Do you take it?\n");
    scanf("%s", response);
    if (response, "yes") {
        printf("You took it, huh? Not what I would've picked, but hey, you seem fine. Uh oh, you don't look so good. I...don't think that was a good idea. Well, there's nothing I can do for you now. Maybe restart the game and see if you can make a better decision. Until next time, old friend.");
    } else if (response, "no") {
        printf("Good choice. Come on, I think there's a town up ahead. I'd list off what the town's name was and all that can be found there, but it's currently 11:32 pm on a Saturday and our creator is halfway convinced that this entire program is a fever dream.");
    }
    return 0;
}

1 Ответ

1 голос
/ 09 февраля 2020

if (response, "yes") и else if (response, "no") не имеют соответствующих тестов условий для того, что вы хотите с ним сделать - сравнивать две строки и управлять потоком по результату, независимо от того, эквивалентны они или нет.

(response, "yes") оценивается как 1, где условие оператора if всегда становится истинным. Таким образом, else if -условие или операторы (если их несколько) впоследствии никогда не будут выполнены.

Используйте strcmp() для сравнения двух строк друг с другом.

Change if (response, "yes") до if (!strcmp(response,"yes")) и else if (response, "no") до if else (!strcmp(response,"no")) и все должно быть в порядке.

Не забудьте включить заголовок string.h на #include <string.h> для использования strcmp().

...