首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C y/n函数无法接受用户输入

C y/n函数无法接受用户输入
EN

Stack Overflow用户
提问于 2019-02-22 09:02:55
回答 1查看 49关注 0票数 0

编辑:这个问题已经解决了,感谢大家的参与!

我正在为我的C/C++类做一个非常简单的项目,在这个项目中,程序使用用户输入的每轮伤害值来模拟Neo和Agent Smith之间的3轮战斗。这部分代码运行良好,但是在代码的末尾,程序会询问用户是否喜欢这场战斗。用户应该输入"y“或"n”并接收相应的语句,但是,无论我输入什么,程序都会返回"n“语句。我的教授让我去问Stack Overflow,因为他似乎不能一眼就发现我语法中的任何错误。

下面是程序:

代码语言:javascript
复制
#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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-22 09:38:05

在尝试解析字符以外的转换之前,scanf()函数会自动删除空格。因此,您应该使用带有附加空格的scanf(" %c", &answer);,否则scanf()将读取输入缓冲区中剩余的空格,这意味着它将忽略您输入的任何字符。因此,条件(answer == 'y')将始终被评估为false。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54818550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档