找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1764|回复: 8
收起左侧

C语言if语句执行问题

[复制链接]
回帖奖励 10 黑币 回复本帖可获得 10 黑币奖励! 每人限 1 次
ID:1079270 发表于 2023-6-30 15:01 | 显示全部楼层 |阅读模式
void Reset()
{
    num1 = 0;
    num2 = 0;
    step = 0;
    LcdFullClear();
}
/* 数字键动作函数,n-按键输入的数值 */
void NumKeyAction(unsigned char n)
{
    unsigned char len;
    unsigned char str[12];
   
    if (step > 1)  //如计算已完成,则重新开始新的计算
    {
        Reset();
    }
    if (step == 0)  //输入第一操作数
    {
        num1 = num1*10 + n;             //输入数值累加到原操作数上
        len = LongToString(str, num1);  //新数值转换为字符串
        LcdShowStr(16-len, 1, str);     //显示到液晶第二行上
    }
    else            //输入第二操作数
    {
        num2 = num2*10 + n;             //输入数值累加到原操作数上
        len = LongToString(str, num2);  //新数值转换为字符串
        LcdShowStr(16-len, 1, str);     //显示到液晶第二行上
    }
}
问:执行完 if (step > 1)
    {
        Reset();
    } 之后要直接执行if (step == 0)  
    {
        num1 = num1*10 + n;            
        len = LongToString(str, num1);
        LcdShowStr(16-len, 1, str);   
    }这个if吗

回复

使用道具 举报

ID:161164 发表于 2023-6-30 17:55 | 显示全部楼层
会直接执行if (step == 0)  
因为step在Reset()里清零了
可以改为
else if (step == 0)  
回复

使用道具 举报

ID:404160 发表于 2023-6-30 17:57 | 显示全部楼层
是的,执行完step>1,表示第一个if语句执行完了,按语句执行顺序,紧接着执行step==0的if语句。第二个if应改成else if。
回复

使用道具 举报

ID:908826 发表于 2023-6-30 20:12 | 显示全部楼层
yes,会继续执行的reset函数把变量清零了,如果想构成分支语句,需要写成if else或者if  elseif else形式
回复

使用道具 举报

ID:1086688 发表于 2023-7-1 15:38 | 显示全部楼层
会执行的,没有else形成分支,只是进行了if判断,会继续按顺序执行语句
回复

使用道具 举报

ID:712097 发表于 2023-7-1 16:22 | 显示全部楼层
2L正解,Reset里面将step置0了,故if (step == 0)  为真。
回复

使用道具 举报

ID:1086796 发表于 2023-7-1 21:11 | 显示全部楼层
是的,当 step 大于 1 时,会执行 Reset() 函数重置变量的值。然后程序会继续执行下一个 if 语句 if (step == 0)。这个 if 语句用于判断是否输入第一个操作数,如果条件满足,会执行相应的操作,包括更新 num1 的值、将其转换为字符串并在液晶屏上显示出来。所以在执行完 Reset() 后,会直接执行下一个 if 语句。
回复

使用道具 举报

ID:420836 发表于 2023-7-1 22:38 | 显示全部楼层
执行 if (step > 1) {
         重置();
     }

程序检查step是否=0,因为reset()置step = 0,所以它执行第二个if语句。
回复

使用道具 举报

ID:1086834 发表于 2023-7-1 23:02 | 显示全部楼层
是的,当执行完`if (step > 1)`中的代码块,如果条件满足,则会执行`Reset()`函数。然后程序会继续向下执行,直接进入下一个`if (step == 0)`的代码块。  如果`if (step == 0)`条件满足,那么会执行花括号内的代码,即将`num1`乘以10加上`n`,然后计算`num1`转换为字符串后的长度存储到`len`变量中,并将这个字符串以适当的位置显示在Lcd上。  这两个if语句是独立的,执行一个不会影响到另一个。当第一个if条件判断不满足时,第一个if块中的代码将被忽略,程序直接跳过它继续向下执行。只有在第一个if条件判断满足时,才会执行第一个if块中的代码,并且会在执行完后直接进入第二个if块中的代码。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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