提问人:ramses adames 提问时间:1/19/2022 更新时间:1/19/2022 访问量:42
C 中布尔值的逻辑函数错误
error in logical function with booleans in C
问:
我正在学习用 C 语言编程,我正在尝试做一个基本的功能来点燃蜡烛,它由 3 个场景组成:蜡烛被点燃,蜡烛熄灭了,我有一个打火机,蜡烛熄灭了,我没有打火机
#include <stdio.h>
#include<stdbool.h>
bool on=false;
bool lighter=false;
void candle(bool on,bool lighter){
if(on==false && lighter=true){
on=true;
printf('The candle is out ,lit candle...');
}
else if(on==false && lighter=false){
printf('The candle is out and I must look for a lighter');
printf('I already have the lighter');
lighter=true;
printf('lit candle...');
on=true;
}
print('The candle is lit');
return 0;
}
问题是 VSCode 给了我一个关于 on 变量的错误,上面写着“表达式必须是可修改的左值”,我不明白它是如何工作的
答:
0赞
Jerry Jeremiah
1/19/2022
#1
好吧,有几件事不对劲。
其中有几个是非常小的错别字:
- 字符串的双引号括起来,但 printf 语句中的字符串是单引号。因此,您需要将它们全部更改为双引号。
- 您用于打印的功能是,但您不小心使用了最后一个。因此,您需要将最后一个更改为
printf
print
printf
- 该函数不会自动在行尾放置换行符。因此,您需要在传递到的每个格式字符串的末尾使用换行符,或者改用该函数。
printf
printf
puts
- void 函数不能返回值,但您已声明该函数返回 void,同时仍尝试从该函数返回零。因此,您需要从该函数中删除 或将返回类型更改为 。
return 0;
int
其中有几个更严重:
==
是平等的比较,但也是分配。您可能不想在 if 语句条件中为变量赋值。因此,您需要将 if 语句中的所有条件更改为 。=
=
==
- C 是按值传递的,因此当您将变量传递给函数时,该函数会接收该变量的副本。如果更改函数中的参数,则更改传递给函数的变量副本,因此永远不会看到您的更改。因此,如果要反映更改,则需要使用指向原始变量的指针的函数参数,或者使用全局变量而不使用函数参数。
- 您具有同名的全局变量和函数参数。它们不是同一个变量。如果在函数中使用变量名称,则使用的是函数参数而不是全局变量 - 全局变量永远不会更改。因此,您永远不应该拥有同名的全局变量和函数参数。
如果进行所有这些更改,则代码将编译。
如果使用全局变量而不是函数参数,则代码将如下所示:
#include <stdio.h>
#include<stdbool.h>
bool on=false;
bool lighter=false;
void candle(){
if(on==false && lighter==true){
on=true;
printf("The candle is out ,lit candle...\n");
}
else if(on==false && lighter==false){
printf("The candle is out and I must look for a lighter\n");
printf("I already have the lighter\n");
lighter=true;
printf("lit candle...\n");
on=true;
}
printf("The candle is lit\n");
}
int main(){
candle();
printf("Result: on=%s lighter=%s\n",
(on?"true":"false"),
(lighter?"true":"false")
);
}
如果使用指向原始变量的指针的函数参数,则代码将如下所示:
#include <stdio.h>
#include<stdbool.h>
void candle(bool * on, bool * lighter){
if(*on==false && *lighter==true){
*on=true;
printf("The candle is out ,lit candle...\n");
}
else if(*on==false && *lighter==false){
printf("The candle is out and I must look for a lighter\n");
printf("I already have the lighter\n");
*lighter=true;
printf("lit candle...\n");
*on=true;
}
printf("The candle is lit\n");
}
int main(){
bool on=false;
bool lighter=false;
candle(& on, & lighter);
printf("Result: on=%s lighter=%s\n",
(on?"true":"false"),
(lighter?"true":"false")
);
}
上一个:5 的值是多少 |3 in C?
下一个:如何将c代码转换为布尔表达式?
评论
=
lighter=true
if(on==false && lighter=true){
lighter=false
else if(on==false && lighter=false){
=
是分配,是比较。你在陈述中将两者混合在一起。==
if
true
false
!on && lighter