编辑:这个问题已经解决了,感谢大家的参与!
我正在为我的C/C++类做一个非常简单的项目,在这个项目中,程序使用用户输入的每轮伤害值来模拟Neo和Agent Smith之间的3轮战斗。这部分代码运行良好,但是在代码的末尾,程序会询问用户是否喜欢这场战斗。用户应该输入"y“或"n”并接收相应的语句,但是,无论我输入什么,程序都会返回"n“语句。我的教授让我去问Stack Overflow,因为他似乎不能一眼就发现我语法中的任何错误。
下面是程序:
#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
发布于 2019-02-22 09:38:05
在尝试解析字符以外的转换之前,scanf()函数会自动删除空格。因此,您应该使用带有附加空格的scanf(" %c", &answer);,否则scanf()将读取输入缓冲区中剩余的空格,这意味着它将忽略您输入的任何字符。因此,条件(answer == 'y')将始终被评估为false。
https://stackoverflow.com/questions/54818550
复制相似问题