【C语法陷阱】:悬挂else引发的问题

0人阅读 评论(0) 收藏 举报
分类:

★请看下面例子代码的输出结果是什么?

#include<stdio.h>

int main()
{
	int a = 5;
	int b = 2;
	if (a == 0)

		if (b == 0)
			a = a + b;
	
	else
	
		a = a - b;
	
	printf("a=%d", a);
	return 0;
}

这段代码我们的本意是当a等于0,判断b是否为0,执行下面a=a+b;的语句。如果a不等于0,则执行a=a-b。然而,这只是我们的想法,编译器却没有这么做,原因是C语言中else始终与同一对花括号内最近的未匹配的if结合,这段代码实际上被执行的逻辑是这样的:
#include<stdio.h>

int main()
{
	int a = 5;
	int b = 2;
	if (a == 0)
	{

		if (b == 0)
			a = a + b;

		else

			a = a - b;
	}
	printf("a=%d", a);
	return 0;
}

也就是说,当a不等于0时这段代码什么也没做,直接输出a=5。如果想按照原来的想法输出,我们应该这样写:
#include<stdio.h>

int main()
{
	int a = 5;
	int b = 2;
	if (a == 0)
	{
		if (b == 0)
		{
			a = a + b;
		}
	}
	else
	{
		a = a - b;
	}
	printf("a=%d", a);
	return 0;
}
现在,else与第一个if结合了,第二个if已经被括号封装起来了。这样,就不会有“悬空else”了。
查看评论

c陷阱与缺陷总结-”悬挂“else

考虑下面程序片段: if (x == 0) if (y == 0) error(); else { z = x + y; f(&z); }zhduandaima zhong...
  • renwotao2009
  • renwotao2009
  • 2014-10-28 18:38:31
  • 1417

悬挂else引发的问题

这个问题虽然已经为人熟知,而且也并非C语言所独有,但即使是有多年经验的C程序员也常常在此失误过。 考虑下面的程序片段: 这段代码中编程者的本意是应该有两种主要情况:x等于0以及x不等于0。对于...
  • iamonlyme
  • iamonlyme
  • 2014-09-22 09:31:51
  • 1057

悬挂else

在C语言中可以看到这样一种形式的代码: if (a > 0) if (b > 0) printf("~~~~~"); else printf("!!!!!!!...
  • Jofranks
  • Jofranks
  • 2012-08-05 15:45:44
  • 3443

c语言语法陷阱总结

学习C语言也有一段时间了,关于语法上的错误,现在基本上也没犯过,不过,我还是想小结一下。一、优先级问题运算优先级的问题,其实在背乘法表,的时候就已经开始接触了。那时候我们知道在加减乘除的混合运算中,先...
  • jhcconan614
  • jhcconan614
  • 2016-12-04 19:21:45
  • 278

Python学习笔记3:Python基础

1、语句和语法 (1)注释(#) (2)继续( \) 存在两种例外情况,一个语句不使用反斜线也可以跨行: 在使用闭合操作符(小括号,中括号,花括号)时单一语句可跨多行; 使用三引号包括下的字符串...
  • tiana0
  • tiana0
  • 2016-07-03 10:56:12
  • 660

jsp中jstl标签的类似 if - else 语句 的语法c:choose

jstl的c:if 没有else,但是可以用choose标签来实现。  结构:        如果1            如果2        ...      否则        ...
  • zsg88
  • zsg88
  • 2017-04-13 13:46:34
  • 384

零基础入门学习Python(8)--了不起的分支和循环2

前言 上节课小甲鱼教大家如何正确的打飞机,其要点是判断和循环,判断就是该不该做某事,循环就是持续做某事 知识点 写一个程序 按照100分制,90分以上成绩为A,80到90为B,60到80为...
  • wanbin6470398
  • wanbin6470398
  • 2018-02-28 16:43:03
  • 26

python常用知识梳理(必看篇)

转载:http://www.jb51.net/article/109231.htm    投稿:jingxian 接触python已有一段时间了,下面针对python基础知识的使用做...
  • Beyond_1024
  • Beyond_1024
  • 2018-01-05 20:35:03
  • 57

悬挂“else”

else匹配规则:与它上面的距离它最近的且在同一级语句块的一个未与else匹配的if语句匹配 初接触C语言的同志可能会犯下面这种错误if(x == 0 if(y == 0) { ...
  • ljx_5489464
  • ljx_5489464
  • 2016-03-10 00:03:53
  • 328

jsp if else c标签 总结

JSTL标签用法 关键字:JSTL标签、、、、、、、、、、、、、、 原来一直没有看过,我说过我是新手,但是好多资料上似乎也不重视 JSTL 。我看项目源代码发现其中使用到了这个标签库,感觉其还真是...
  • u012730333
  • u012730333
  • 2014-12-22 16:46:42
  • 4980
    个人资料
    持之以恒
    等级:
    访问量: 708
    积分: 342
    排名: 23万+
    文章存档
    最新评论