鱼C论坛

 找回密码
 立即注册
查看: 999|回复: 9

[已解决]菜鸟求助

[复制链接]
发表于 2020-10-12 16:12:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
下面是一个简单四则运算的计算器程序,其中要求当除数为0时输出“除数不能为零!”语句;程序开头的“bool invalid=false "以及后面的"else invalid=true"怎么理解  求大佬解释




#include <stdio.h>
#include <stdbool.h>

int main()
{
        float op1, op2;
        char ch;
        float result;
        bool invalid = false;

        printf("请输入式子:");
        scanf("%f %c %f", &op1, &ch, &op2);

        switch (ch)
        {
                case '-': op2 = -op2; // no break
                case '+': result = op1 + op2; break;
                case '*': result = op1 * op2; break;
                case '/':
                        if (op2 != 0)
                        {
                                result = op1 / op2;
                                break;
                        }
                        else
                        {
                                invalid = true;
                                break;
                        }
        }

        if (invalid)
        {
                printf("除数不能为零!\n");
        }
        else
        {
                printf("结果是:%.2f\n", result);
        }

        return 0;
}
最佳答案
2020-10-12 17:11:56
Cehic 发表于 2020-10-12 17:03
除非你写明条件为if(invalid=false)否则自动默认invalid =true是执行条件?(回答了这个问题就给你设){ ...

if后面跟的本质上就是一个布尔型变量,无论是(某某等于某某),还是单纯一个变量,只要其值为true,就会执行if后面的语句块,这个应该不难理解吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-12 16:19:36 | 显示全部楼层
本帖最后由 昨非 于 2020-10-12 16:47 编辑

invalid作为bool型标记变量,根据它的真假来决定是否打印“除数不能为零”

初始默认值为false,也就是假,这个时候,是不会打印提示”除数不能为零“的
当你的输入经过if else判断没有通过时(即除数是零),就会把invalid 变量变成true,
在执行到if(true)时,就会(按题目要求)打印出”除数不能为零“
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-12 16:23:14 | 显示全部楼层
#include <stdio.h>
#include <stdbool.h>

int main()
{
        float op1, op2;
        char ch;
        float result;
        //这是一个标志,用于记录除数是否为0,程序的逻辑是除数为0时,设定 invalid = true ,除数不为0或进行 +-* 运算时 invalid = false
        bool invalid = false;

        printf("请输入式子:");
        scanf("%f %c %f", &op1, &ch, &op2);

        switch (ch)
        {
                case '-': op2 = -op2; // no break
                case '+': result = op1 + op2; break;
                case '*': result = op1 * op2; break;
                case '/':
                        //判断除数是否为0,除数不为0,计算除法
                        if (op2 != 0)
                        {
                                result = op1 / op2;
                                break;
                        }
                         //除数为0,设置标志为true
                        else
                        {
                                invalid = true;
                                break;
                        }
        }
        //根据标记来判断除数是否为0
        if (invalid)
        {
                printf("除数不能为零!\n");
        }
        else
        {
                printf("结果是:%.2f\n", result);
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-12 16:46:14 | 显示全部楼层
昨非 发表于 2020-10-12 16:19
invalid作为bool型标记变量,根据它的真假来决定是否打印“除数不能为零”

初始默认值为false,也就是假 ...

那也就是说因为他的默认值为假,所以一直不会执行,当值为真是才会执行(即最后一个if(invalid)是if (invalid=true)的简写吗?除非你写明条件为if(invalid=false)否则自动默认invalid =true是执行条件?)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-12 16:47:06 | 显示全部楼层
Cehic 发表于 2020-10-12 16:46
那也就是说因为他的默认值为假,所以一直不会执行,当值为真是才会执行(即最后一个if(invalid)是if (inv ...

对,就是简写的意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-12 16:56:58 | 显示全部楼层
Cehic 发表于 2020-10-12 16:46
那也就是说因为他的默认值为假,所以一直不会执行,当值为真是才会执行(即最后一个if(invalid)是if (inv ...

理解了的话,记得设个最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-12 17:03:47 | 显示全部楼层
昨非 发表于 2020-10-12 16:47
对,就是简写的意思

除非你写明条件为if(invalid=false)否则自动默认invalid =true是执行条件?(回答了这个问题就给你设)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-12 17:04:21 | 显示全部楼层
bool invalid=false 就是标记,
当op2是0的时候把invalid的值改为true,
然后后面执行的时候判断invalid的值是不是true,
是的话说明op2是0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-12 17:05:40 | 显示全部楼层
本帖最后由 昨非 于 2020-10-12 17:07 编辑
Cehic 发表于 2020-10-12 17:03
除非你写明条件为if(invalid=false)否则自动默认invalid =true是执行条件?(回答了这个问题就给你设){ ...


默认就是if invalid= true,
if(a)等价于if(a==true)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-12 17:11:56 | 显示全部楼层    本楼为最佳答案   
Cehic 发表于 2020-10-12 17:03
除非你写明条件为if(invalid=false)否则自动默认invalid =true是执行条件?(回答了这个问题就给你设){ ...

if后面跟的本质上就是一个布尔型变量,无论是(某某等于某某),还是单纯一个变量,只要其值为true,就会执行if后面的语句块,这个应该不难理解吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-12 16:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表