C语言if语句的坑

 嗨!这里是C语言小白。

因为考试需要开始学习C语言了,敲惯了JavaScript后,敲C语言实现课后习题,敲出来的结果总是意料之外!每每排错,都是if语句有问题,外层if语句的else子句被当成外层if语句里内嵌if语句的子句了!

我真是太不习惯C敲if语句的形式了!今天我就要把它拿下!

  • 标准形式的if语句(if语句有两种形式:一种是带else子句的,一种是不带else子句的
//带else子句的if语句
if (x > y)
		printf("表达式为真,进入if语句");
else
		printf("表达式为假,进入else子句");
  • 嵌套的if语句
	if (x > y)
		printf("表达式为真,进入外层if语句\n");
		if (x == y)
			printf("x=y我是嵌套的if语句\n");
	else
		printf("表达式为假,进入嵌套的else子句\n");

 虽然按格式上,我们表达的是外层if语句带了else子句。

 但程序执行的情况是:当x>y时进入外层if语句,执行printf函数,判断x是否等于y,由于内嵌的if语句是从x大于y为真进入的,说明x不可能等于y,接着程序执行内嵌的if语句的else子句,打印"表达式为假,进入嵌套的else子句"。

程序执行结果:

 

看到执行结果的你懵了,你的else子句是写给外层if语句的else子句,怎么变成内层的了。是因为if与else的配对规则:else总是和在它前面最近的未配对的if相配对

如何解决C中if语句(带else子句)的坑呢?

  1. 内嵌的if语句也应包括else部分;——————(这样就不怕子句的if被别人的else抢走啦)
  2. 把内嵌的if语句放入外层的else子句中;——————(这样内嵌的if语句就跑在else子句后了,else子句不会找它代码块里的if)
  3. 加大括号,限定if语句的范围;
  4. 程序写成锯齿形,同一层次的if和else在同一列上;

C语言代码规范——齿轮形

//if与else后只含一个内嵌操作语句可不用缩进,直接放在if/else后
if (x > y) printf("x大于y");
else
	printf("x小于等于y");
	if (x == y) printf("x等于y");
	else
		if (x < y) printf("x小于y");
		else printf("同一层次的if语句放一起");
//缩进的if语句
if (x > y) 
	printf("x大于y");
else
	printf("x小于等于y");
	if (x == y) 
		printf("x等于y");
	else
		if (x < y) 
			printf("x小于y");
		else 
            printf("同一层次的if语句放一起");

你可能感兴趣的:(c语言)