C语言if语句中常见的问题

前言

if语句是在学习C语言中过程中遇到的第一个非常重要的语句,在使用过程中往往会出现各种问题,所以在此总结出一些最常见的问题供大家参考和讨论。


1. if语句控制的范围问题

在大多数编程语言中,if语句默认只能控制其接下来的第一条语句,如果想要控制多条语句,则必须将被包含的语句用花括号括起来。

#include <stdio.h>

int main()
{
	if (3 > 2)
		printf("AAAA\n"); // AAAA会输出
	printf("BBBB\n"); // BBBB也会输出,但是不受if语句的控制
	
	if (1 > 2)
		printf("CCCC\n"); // CCCC不会输出
	printf("DDDD\n"); // DDDD依旧会输出,因为if语句默认只能控制接下来的第一条语句,通俗地说,BBBB的输出与if语句无关
	
	return 0;
}

2. 空语句问题

初学时容易在if ()后加分号,如if ();。C语言规定,见到分号就是一个完整的语句。因为if默认只能控制其接下来的第一条语句,所以空语句后的所有语句都与if语句无关。

#include <stdio.h>

int main()
{
	if (1 > 2);
		printf("AAAA\n");
	printf("BBBB\n");
	// 等价于
	if (1 > 2)
		; // 这样的语句被称为空语句
		printf("AAAA\n"); // AAAA会输出,因为该语句与if语句无关
	printf("BBBB\n"); // BBBB也会输出,因为该语句与if语句无关
	
	return 0;
}

3. 在if…else if…else…语句中间插入多条语句的问题

#include <stdio.h>

int main()
{
	if (3 > 2)
		printf("AAAA\n");
	else if (3 == 2)
		printf("BBBB\n");
		printf("CCCC\n"); 
	else
		printf("DDDD\n");
	
	return 0;
}

如上代码会使程序出错,因为if语句默认只能控制其接下来的第一条语句,同理,else if和else语句也默认只能控制其接下来的第一条语句。当使用if…else if…else…语句时,如果在中间插入多条语句,则需要用花括号括起来。正确代码如下所示:

#include <stdio.h>

int main()
{
	if (3 > 2)
		printf("AAAA\n");
	else if (3 == 2)
	{
		printf("BBBB\n");
		printf("CCCC\n"); 
	}
	else
		printf("DDDD\n");
	
	return 0;
}
  • 思考:如果在上面程序中的if (3 > 2)后加一个分号,此时的程序(也就是下面的程序)是否可以编译运行?
#include <stdio.h>

int main()
{
	if (3 > 2);
		printf("AAAA\n");
	else
		printf("BBBB\n");
	
	return 0;
}

4. if…else if…else…语句执行的个数问题

#include <stdio.h>

int main()
{
	if (3 > 2)
		printf("AAAA\n");
	else if (3 > 1)
		printf("BBBB\n");
	else
		printf("CCCC\n");
	
	return 0;
}
  • 推断1:如果AAAA和BBBB都输出,则只要当if…else if…else…语句中的表达式成立,就会执行所有成立的表达式对应的语句
  • 推断2:如果只有AAAA输出而BBBB不输出,则当if…else if…else…语句中即便有多个表达式同时成立也只会从上至下执行第一个成立的表达式对应语句
  • 运行结果:只有AAAA输出,推断2成立

5. 可否仅使用if…else if…语句而不使用else语句

#include <stdio.h>

int main()
{
	if (3 > 2)
		printf("AAAA\n");
	else if (3 > 1)
		printf("BBBB\n");
		
	return 0;
}

答案是可以的,通过程序可以验证,语法上没有任何的错误,但是逻辑上可能会出现一定的漏洞。

6.else后是否可以加表达式

#include <stdio.h>

int main()
{
	if (3 > 2)
		printf("AAAA\n");
	else if (3 > 1)
		printf("BBBB\n");
	else (5 > 3)
		printf("CCCC\n");
		
	return 0;
}

如上代码无法编译成功,证明else后不可以加表达式。

  • 思考:如果在上面程序中的else后加一个分号,此时的程序(也就是下面的程序)是否可以编译运行?
#include <stdio.h>

int main()
{
	if (3 > 2)
		printf("AAAA\n");
	else if (3 > 1)
		printf("BBBB\n");
	else (5 > 3);
		printf("CCCC\n");
		
	return 0;
}

上图中的代码是可以编译并运行的,原因如下面的代码所示:

	else (5 > 3);
		printf("CCCC\n");
	//等价于
	else
		(5 > 3);
		printf("CCCC\n");
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值