C语言 警告:无效的语句 [-Wunused-value] 与 if 语句



所以我试图弄清楚 while 循环和主要是 if 语句,所以我试图制作这个小游戏,你有一定数量的生命值,怪物也是如此,只要你们都有超过 0 的生命值,循环就会运行,所以每个循环怪物都会对你造成 50 点伤害, 但是使用 scanf 和 if 语句可以通过插入"2"来改变情况,您可以减少您受到的伤害,通过使用"3"您可以增加您的生命值,通过使用"1"您可以对怪物造成伤害,但由于某种原因,负责这些事件的 IF 语句似乎不起作用

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

int main(){
int monsterhealth =100;
int health =100;
int damage =50;
while(health>0&&monsterhealth>0){
int action [10];
printf("player has %d health n",health);
printf("monster has %d healthn",monsterhealth);
printf("act:attack[1]ndefend[2]npotion[3]n");
scanf ("%d",action);
if(action==1){(monsterhealth==monsterhealth-40);}
else if(action==2){(damage==damage-30);}
else (action==3);{(health==health+100);};
health=health-damage;
}
}

关于:

int action [10];

如果只需要一个操作,请声明一个简单的对象,而不是数组:

int action;

进行该更改时,您将需要更改:

scanf ("%d",action);

自:

scanf("%d", &action);

这会将action的地址传递给scanfscanf需要知道action的地址,以便对其进行更改。如果您使用数组是因为scanf似乎不适用于简单对象,请不要这样做。数组可以解决您在使用scanf时可能遇到的问题,因为它们在 C 中具有某些行为,但这不是正确的解决方案。

关于:

while(health>0&&monsterhealth>0){

不要将代码挤在一起。写下它,以便于阅读,间距传达含义:

while (health > 0 && monsterhealth > 0) {

关于:

(monsterhealth==monsterhealth-40);

这种说法没有效果,因为==只是比较了两件事。该语句不会更改任何对象(变量(的值,也不会产生任何其他可观察的影响。它说"将monsterhealthmonsterhealth-40进行比较,然后对比较结果不做任何事情。这里你想要的是赋值运算符,=而不是==,它说"在这个东西中放一个新值":

monsterhealth = monsterhealth-40;

以类似方式更改要在其中分配新值的其他语句。

关于:

else (action==3);{(health==health+100);};

if-else语句的形式为:

if (condition)
statement;
else if (condition)
statement;
else
statement;

请注意,它应该以else statement结尾,而不是else (condition) statement结尾。使用上面的线条结构和缩进。(有时,一个带有单个if的非常简短的陈述可以放在同一行上,但在您更有经验并且具有良好的风格感之前不要这样做。这需要大约三十年左右的时间才能发展起来。您想要的代码是:

if (action == 1)
monsterhealth = monsterhealth - 40;
else if (action == 2)
damage = damage - 30;
else
health = health + 100;

有些人可能会用有关其所涵盖案例的信息来装饰else,例如:

if (action == 1)
monsterhealth = monsterhealth - 40;
else if (action == 2)
damage = damage - 30;
else /* action == 3 */
health = health + 100;

有些人主张将所有附加到if语句和else语句放在大括号中,以避免某些编辑错误。对于单个语句,C 语言不需要它。

C 有另一种形式的语句,用于处理您在这些if语句中测试的特定条件,即switch语句,但我认为您刚刚习惯这些语句,稍后会了解switch

我建议你不要使用局促的C样式。它导致您编写不正确的 C 并引入了错误。稍微打开它并使用传统的缩进样式。学习使用一些 C 习语,这样你就不会引入错误,比如在你应该使用 = 的时候使用 ==,引入;你不应该的地方,等等。

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

int main(void)
{
int monsterhealth = 100;
int health = 100;
int damage = 50;
while (health > 0 && monsterhealth > 0) {
int action;
printf("player has %d health n", health);
printf("monster has %d healthn", monsterhealth);
printf("act:attack[1]ndefend[2]npotion[3]n");
scanf("%d", &action);
if (action == 1) {
(monsterhealth -= 40);
}
else if (action == 2) {
(damage -= 30);
}
else if (action == 3)
{
(health += 100);
}
health = health - damage;
}
}

最新更新