C y / n функция не может принять пользовательский ввод - PullRequest
0 голосов
/ 22 февраля 2019

РЕДАКТИРОВАТЬ: Эта проблема была решена, спасибо всем за ввод!

Я работаю над очень простым проектом для моего класса C / C ++, в котором программа имитирует 3-раундовый бой между Neoи агент Смит, используя введенные пользователем значения урона для каждого раунда.Эта часть кода работает нормально, однако в конце кода программа спрашивает пользователя, понравилось ли ему сражение.Предполагается, что пользователь вводит «y» или «n» и получает соответствующий оператор, однако независимо от того, что я ввожу, программа возвращает оператор «n».Мой профессор попросил меня задать переполнение стека, потому что он не может сразу же обнаружить ошибки в моем синтаксисе.

Вот программа:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    double NEO_DAMAGE;
    int SMITH_DAMAGE;
    float NEO_SKILL=10;
    float SMITH_SKILL=12;
    float NEO_MULTIPLIER=1.5;
    float SMITH_MULTIPLIER=1.7;
    int FIGHT_NUMBER =1;
    while (FIGHT_NUMBER<=3)
{
    printf("Round ");
    printf("%d\n", FIGHT_NUMBER);
    printf("Neo and Smith must FIGHT! \n");
    printf("\n");
    printf("How much damage does Neo deal? (1-10)\n");
    scanf("%lf",&NEO_DAMAGE);
    printf("\n");
    printf("How much damage does Smith deal? (1-10)\n");
    scanf("%d",&SMITH_DAMAGE);
    printf("\n");

    SMITH_DAMAGE=SMITH_DAMAGE+((FIGHT_NUMBER-1)*0.5);
    NEO_SKILL=((NEO_SKILL*NEO_MULTIPLIER)-SMITH_DAMAGE);
    SMITH_SKILL=((SMITH_SKILL*SMITH_MULTIPLIER)-NEO_DAMAGE);
    FIGHT_NUMBER=FIGHT_NUMBER+1;
}
    printf("Neo's final skill: ");
    printf("%.3f\n", NEO_SKILL);
    printf("Smith's final skill: ");
    printf("%.3f\n", SMITH_SKILL);

    char answer;
    printf("\nDid you enjoy the fight? (y or n)\n");
    scanf("%c", &answer);
    if (answer == 'y'){
        printf("Wow! You're easily entertained. \n");
    }
    else {
        printf("I can't blame you :c \n");
    }

    return 0;
}

Когда это скомпилировано вCodeBlocks, использующие компилятор GNU GCC, возвращает «Процесс завершен со статусом 0 (0 минут, 0 секунд)» 0 ошибок, 0 предупреждений (0 минут, 0 секунд)) ".

Любое понимание будет высоко ценится.Спасибо!

-Maxx

1 Ответ

0 голосов
/ 22 февраля 2019

Функция scanf() автоматически удаляет пробелы, прежде чем пытаться анализировать преобразования, отличные от символов.Поэтому вы должны использовать scanf(" %c", &answer); с добавленным пробелом, в противном случае scanf() считывает все пробелы, оставшиеся во входном буфере, что означает, что он будет игнорировать любой введенный вами символ.Поэтому условие (answer == 'y') всегда будет оцениваться как ложное.

...