C语言学习笔记 - 53.流程控制7 - 选择3 - if语句的作用范围

一、核心问题引入

if语句是C语言中实现选择结构的基础,其作用范围是流程控制中最关键的知识点。明确if语句能控制哪些语句的执行,直接决定了程序逻辑的正确性。很多初学者的逻辑错误都源于对if作用范围的误解。

二、if语句的默认作用范围

核心规则

if表达式后面默认只能控制紧随其后的一个语句​ 的执行与否。

  • 若if条件为真(非0),则执行该语句;

  • 若if条件为假(0),则跳过该语句;

  • if无法控制该语句之后的其他语句,后续语句无论条件是否成立,都会被执行。

代码示例1:默认单语句控制

复制代码
#include <stdio.h>

int main() {
    // 情况1:条件为真
    if (3 > 2)
        printf("AAAA\n");  // 受if控制,条件为真时执行
    printf("BBBB\n");      // 不受if控制,无论条件真假都会执行

    // 情况2:条件为假
    if (1 > 2)
        printf("CCCC\n");  // 受if控制,条件为假时不执行
    printf("DDDD\n");      // 不受if控制,一定会执行

    return 0;
}

输出结果与分析

复制代码
AAAA
BBBB
DDDD
  1. 第一个if条件3>2为真,执行printf("AAAA\n")

  2. printf("BBBB\n")是独立语句,不受if控制,直接执行;

  3. 第二个if条件1>2为假,跳过printf("CCCC\n")

  4. printf("DDDD\n")是独立语句,直接执行。

三、多语句控制方法:复合语句

核心规则

如果需要if控制两个或两个以上 语句的执行,必须使用**复合语句(花括号{})**将这些语句包裹起来。

  • 复合语句在语法上等价于一个语句

  • 此时if可以控制花括号内的所有语句;

  • 花括号外的语句仍不受if控制。

代码示例2:使用复合语句控制多语句

复制代码
#include <stdio.h>

int main() {
    // 情况1:条件为假
    if (1 > 2) {
        printf("AAAA\n");  // 受if控制
        printf("BBBB\n");  // 受if控制
    }
    printf("CCCC\n");      // 不受if控制,一定会执行

    return 0;
}

输出结果与分析

复制代码
CCCC
  • if条件1>2为假,跳过花括号内的所有语句;

  • printf("CCCC\n")是独立语句,直接执行。

代码示例3:条件为真时的复合语句

复制代码
#include <stdio.h>

int main() {
    if (3 > 2) {
        printf("AAAA\n");  // 受if控制
        printf("BBBB\n");  // 受if控制
    }
    printf("CCCC\n");      // 不受if控制

    return 0;
}

输出结果与分析

复制代码
AAAA
BBBB
CCCC
  • if条件3>2为真,执行花括号内的所有语句;

  • 继续执行花括号外的独立语句。

四、编程规范与常见错误

1. 缩进规范

  • 属于if内部的语句(复合语句内的语句)必须缩进,通常缩进4个空格或1个Tab;

  • 与if同级的语句(花括号外的语句)必须与if左对齐;

  • 缩进可以显著提高代码的可读性,清晰展示语句的从属关系。

正确格式:

复制代码
if (条件) {
    语句1;  // 缩进
    语句2;  // 缩进
}
语句3;      // 与if对齐

2. 花括号配对错误

  • 花括号必须成对出现,遗漏或多写花括号都会导致编译错误;

  • 建议的编写习惯:先写一对花括号,再在中间填写内部语句,避免遗漏。

错误示例:

复制代码
if (3 > 2) {
    printf("AAAA\n");
printf("BBBB\n");  // 缺少右花括号,导致编译错误

3. 逻辑边界错误

不要误以为if可以自动控制后续的多行语句。即使多行语句在视觉上缩进对齐,只要没有用花括号包裹,if仍然只能控制第一行。

错误逻辑示例:

复制代码
if (1 > 2)
    printf("AAAA\n");
    printf("BBBB\n");  // 视觉上缩进,但语法上不受if控制,一定会执行

该代码会输出BBBB,这是初学者最容易犯的逻辑错误。

五、总结

  1. 默认规则 :if语句默认只能控制紧随其后的一个语句

  2. 多语句控制 :若需控制多个语句,必须用**花括号{}**将其包裹为复合语句;

  3. 编程规范:内部语句缩进、花括号成对编写,可有效避免逻辑错误和编译错误;

  4. 核心原则:流程控制的本质是范围控制,明确每个语句的从属关系是编写正确程序的基础。

参考出处

  • 《C程序设计(第五版)谭浩强》第4章 选择结构程序设计 4.2.2 if语句的一般形式

  • 郝斌-C语言自学入门教程 第5章 流程控制