if(a=1) b=1;c=2;else d=3;报错:error: ‘else’ without a previous ‘if’,背后的逻辑及根本原因。

题目:

int a=0,b=0,c=0,d=0;

if(a=1) b=1;c=2;

else    d=3;

printf("%d,%d,%d,%d\n",a,b,c,d);

错误原因:

报错:error: ‘else’ without a previous ‘if’

错误:“else”没有上一个“if”

翻译过来:是else没有匹配到if,所以报的错。

但为什么,没能匹配到if 呢?以下就是问题背后的原因 

无括号的if  else   语法格式:

If()    执行语句1;

else  执行语句1;

无{ }括号的If(),执行一条结束语句,就到else。

结论:Else的上一行是一条结束语句,

Else的上一行的上一行是if

如图-正确:If → 结束语句1; → else

执行语句1;   ==    一条结束语句;

语句结束 ?后续的论述:源自以下知识为基础,展开论述:

C语言规定:语句的结束符用分号;来进行标识。

C语言中语句分:简单语句 和 复合语句

简单语句:分号;作为结束。

简单语句:有赋值语句、声明语句、结构化语句、函数调用等。

复合语句:括号{ } 的 } 作为语句结束的标记

复合语句:指用花括号{  } 将简单语句包起来

;结尾的简单语句是一个结束语句

{} 包起来的复合语句是一个整体,也视为一个结束语句

题目错误格式:

If()   执行语句1;执行语句2;

else  执行语句1;

而现在Else的上上行语句:找到的是结束语句1;

正确:If →结束语句1;→else

错误:If →结束语句1;→结束语句2;→else

它找不到If() 所以报错了。

有括号的if else  语法格式

If(){ 执行语句1;执行语句2;....

}else  执行语句1;

那为什么?这样写为什么正确呢

加了括号的if执行语句,else却可以找到if呢?

因为:{} 括起来的多行代码,被视为一个整体,

它相当于被当作一行结束语句。

{ 结束语句1;结束语句2;} 是一行语句,

被{} 包起来的复合语句是一个整体,相当于一个一行结束语句

因此:这就是为什么?被{}括起来的复合语句,else能找到if的原因。

Else的上行语句则是一行结束语句

Else的上上行语句则是if,所以else能找到if。

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值