C语言if语句的坑

本文探讨了C语言初学者在使用if语句时遇到的问题,特别是else子句与内嵌if语句的匹配问题。博主分享了在编写带else子句的if语句时,内嵌if语句可能导致的逻辑错误,并提出了四种解决方案:确保内嵌if语句包含else部分,将内嵌if语句放入外层else中,使用大括号明确范围,以及遵循齿轮形代码规范。通过这些方法,可以避免else与错误的if匹配,提高代码的可读性和正确性。
摘要由CSDN通过智能技术生成

 嗨!这里是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语句放一起");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值