题目:
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。