欢迎光临
我们一直在努力

C语言从入门到进阶——第3讲:分支和循环(上)

文章目录

    • 1. if语句
      • 1.1 if
      • 1.2 else
      • 1.3 分支中包含多条语句
      • 1.4 嵌套if
      • 1.5 悬空else问题
    • 2. 关系操作符
      • 2.1 用法示例
      • 2.2 返回值
      • 2.3 注意事项
    • 3. 条件操作符
      • 3.1 计算逻辑
      • 3.2 练习1:改写if-else逻辑
      • 3.3 练习2:找两个数中的较大值
    • 4. 逻辑操作符: && , || , !
      • 4.1 逻辑取反运算符 !
      • 4.2 逻辑与运算符 &&
      • 4.3 逻辑或运算符 ||
      • 4.4 练习:闰年的判断
      • 4.5 短路求值
    • 5. switch语句
      • 5.1 语法形式
      • 5.2 if语句和switch语句的对比
      • 5.3 switch语句中的break
      • 5.4 switch语句中的default
      • 5.5 switch语句中case和default的顺序
    • 6. while循环
      • 6.1 if 和 while的对比
      • 6.2 while语句的执行流程
      • 6.3 while循环的实践
      • 6.4 练习:逆序打印整数的每一位
    • 7. for循环
      • 7.1 语法形式
      • 7.2 for循环的执行流程
      • 7.3 for循环的实践
      • 7.4 while循环和for循环的对比
      • 7.5 练习:计算1~100之间3的倍数的和
    • 8. do-while循环
      • 8.1 语法形式
      • 8.2 do-while循环的执行流程
      • 8.3 do-while循环的实例
      • 8.4 练习:计算整数的位数
    • 9. break和continue语句
      • 9.1 break的作用
        • 9.1.1 while循环中的break
        • 9.1.2 for循环中的break
        • 9.1.3 do-while循环中的break
      • 9.2 continue的作用
        • 9.2.1 while循环中的continue
        • 9.2.2 for循环中的continue
        • 9.2.3 do-while循环中的continue
    • 10. 循环的嵌套
    • 11. goto语句
      • 11.1 语法形式
      • 11.2 基本用法
      • 11.3 多层循环中快速跳出

C语言是结构化的程序设计语言,结构指
顺序结构、
选择结构、
循环结构。
C语言可通过
if、
switch实现选择结构,通过
for、
while、
do while实现循环结构。

1. if语句

1.1 if

if 语句的语法形式如下:

if (表达式) 语句

表达式成立(为真)则语句执行,不成立(为假)则不执行。

C语言中,0为假,非0表示真。

例子:输入一个整数,判断是否为奇数

#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\\n", num);
return 0;
}

在这里插入图片描述

1.2 else

如果要清楚的判断判断整数是奇数还是偶数,就需使用if…else…语句,语法形式如下:

if (表达式)
语句1
else
语句2

例子:输入一个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数。

#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\\n", num);
else
printf("%d 是偶数\\n", num);
return 0;
}

练习:输入一个年龄,>= 18 岁就输出:成年,否则就输出:未成年。

#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age>=18)
printf("成年\\n");
else
printf("未成年\\n");
return 0;
}

1.3 分支中包含多条语句

默认if和else仅控制一条语句。 若需控制多条语句,需用{}将代码括起来,形成程序块(复合语句)。

示例:

#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18) //if 后使⽤{}控制多条语句-这个块叫:程序块,或者复合语句
{
printf("成年了\\n");
printf("可以谈恋爱了\\n");
}
else //else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("未成年\\n");
printf("不可以早恋哦\\n");
}
return 0;
}

1.4 嵌套if

else可与另一个if连用,构成多重判断。

例子1:输入一个整数,判断输入的整数是 0,还是正数或者负数。

#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num == 0)
printf("输入的数字是0\\n");
else if(num > 0) //这⾥的if 相当于嵌套在else语句中,形成了嵌套结构
printf("输入的数字是正数\\n");
else
printf("输入的数字是负数\\n");
return 0;
}

例子2:输入一个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:非正数。

#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num > 0)
{
if(num%2 == 0)
printf("偶数\\n");
else
printf("奇数\\n");
}
else
printf("非正数\\n");
return 0;
}

练习: 输入一个入的年龄 如果年龄<18岁,打印"少年" 如果年龄在18岁至44岁打印"青年" 如果年龄在45岁至59岁打印"中老年" 如果年龄在60岁至89岁打印"老年" 如果90岁及以上打印"老寿星"

#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age < 18)
printf("少年\\n");
else if(age <= 44)
printf("青年\\n");
else if(age <= 59)
printf("中老年\\n");
else if(age <= 89)
printf("老年\\n");
else
printf("老寿星\\n");
return 0;
}

1.5 悬空else问题

如果有多个 if 和 else ,可以记住这样⼀条规则: else总是与最接近的if匹配。

反例:

#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\\n");
else
printf("haha\\n");
return 0;
}

很多初学者,上来判断第一个 if 语句,a==1为假,就觉得应该执行 else 语句,打印 haha ,但是当你去运行代码,会发现没有输出。 实际,根据 else总是与最接近的if匹配 的规则,else是与第二个if匹配的,相当于如下代码

#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe\\n");
else
printf("haha\\n");
}
return 0;
}

因a==1为假,所以无任何输出。

正例(指定else匹配第一个if):

#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe\\n");
}
else
{
printf("haha\\n");
}
return 0;
}

只要带上适当的大括号,代码的逻辑就会更加的清晰,所以在写代码的时候,要注意括号的使用,让代码的可读性更高。

2. 关系操作符

C语言中用于比较的表达式称为“关系表达式”,使用的运算符称为“关系运算符”,主要有如下6个:

  • >:大于运算符
  • <:小于运算符
  • >=:大于等于运算符
  • <=:小于等于运算符
  • ==:相等运算符
  • !=:不相等运算符

2.1 用法示例

a == b; // a等于b
a != b; // a不等于b
a < b; // a小于b
a > b; // a大于b
a <= b; // a小于等于b
a >= b; // a大于等于b

2.2 返回值

关系表达式返回0或1,表示真假。例如:

  • 20 > 12 返回1(真)
  • 12 > 20 返回0(假)

2.3 注意事项

  • 区分==与=:==是相等运算符,=是赋值运算符,切勿混淆。例如:

    if (x = 3) // 错误:将3赋值给x,返回值为3(真),if判断恒成立
    if (x == 3) // 正确:判断x是否等于3

    建议将常量写在等号左侧,若误写为=,编译器会报错:

    if (3 == x) // 正确,误写为3 = x会报错

  • 避免多个关系运算符连用:连续使用关系运算符不会达到预期效果。例如:

    i < j < k // 实际执行:(i < j) < k,返回0或1与k比较

    若需判断j在i和k之间,应使用逻辑运算符:

    i < j && j < k

  • 示例:我们输入一个年龄,如果年龄在18岁~36岁之间,输出青年。

    错误示例:判断年龄在18~36岁之间

    #include <stdio.h>
    int main()
    {
    int age = 0;
    scanf("%d", &age);
    if(18 <= age <= 36) // 错误:实际执行(18<=age) <=36
    printf("青年\\n");
    return 0;
    }

    正确示例:

    #include <stdio.h>
    int main()
    {
    int age = 0;
    scanf("%d", &age);
    if(age >= 18 && age <= 36) // 正确:使用逻辑与运算符
    printf("青年\\n");
    return 0;
    }

    3. 条件操作符

    条件操作符(三目操作符)需接受三个操作数,语法形式如下:

    exp1 ? exp2 : exp3

    3.1 计算逻辑

    • 若exp1为真,计算exp2,结果为整个表达式的结果;
    • 若exp1为假,计算exp3,结果为整个表达式的结果。

    3.2 练习1:改写if-else逻辑

    原代码:

    #include <stdio.h>
    int main()
    {
    int a=0;
    int b=0;
    scanf("%d",&a);
    if(a>5)
    b=3;
    else
    b=–3;
    printf("%d\\n", b);
    return 0;
    }

    改写后:

    #include <stdio.h>
    int main()
    {
    int a=0;
    int b=0;
    scanf("%d", &a);
    b=(a>5?3:–3); // 条件操作符简化逻辑
    printf("%d\\n",b);
    return 0;
    }

    3.3 练习2:找两个数中的较大值

    #include <stdio.h>
    int main()
    {
    int a=0;
    int b=0;
    scanf("%d %d", &a, &b);
    int m=(a>b?a:b); // 条件操作符找最大值
    printf("%d\\n", m);
    return 0;
    }

    4. 逻辑操作符: && , || , !

    逻辑运算符用于构建复杂表达式,提供逻辑判断功能,共3个:

    • !:逻辑取反运算符(改变单个表达式的真假);
    • &&:逻辑与运算符(两侧表达式都为真,结果才为真,否则为假);
    • ||:逻辑或运算符(两侧至少一个表达式为真,结果为真,否则为假)。

    4.1 逻辑取反运算符 !

    a!a
    非0 0
    0 1

    示例:当flag为假时执行操作

    #include <stdio.h>
    int main()
    {
    int flag = 0;
    if(!flag) // flag为0(假),!flag为1(真),执行语句
    {
    printf("do something\\n");
    }
    return 0;
    }

    4.2 逻辑与运算符 &&

    aba&&b
    非0 非0 1
    非0 0 0
    0 非0 0
    0 0 0

    示例:判断月份是否为3~5月(春季)

    int month = 0;
    scanf("%d", &month);
    if(month >= 3 && month <= 5) // 同时满足两个条件才为真
    {
    printf("春季\\n");
    }

    4.3 逻辑或运算符 ||

    aba II b
    非0 非0 1
    非0 0 1
    0 非0 1
    0 0 0

    示例:判断月份是否为12、1、2月(冬季)

    int month = 0;
    scanf("%d", &month);
    if(month == 12 || month == 1 || month == 2) // 满足任一条件即为真
    {
    printf("冬季\\n");
    }

    4.4 练习:闰年的判断

    闰年规则:

  • 能被4整除且不能被100整除;
  • 能被400整除。
  • 代码1:

    #include <stdio.h>
    int main()
    {
    int year = 0;
    scanf("%d", &year);
    if(year % 4 == 0 && year % 100 != 0)
    printf("是闰年\\n");
    else if(year % 400 == 0)
    printf("是闰年\\n");
    return 0;
    }

    代码2(合并条件):

    #include <stdio.h>
    int main()
    {
    int year = 0;
    scanf("%d", &year);
    if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
    printf("是闰年\\n");
    return 0;
    }

    4.5 短路求值

    逻辑运算符的特点:先对左侧表达式求值,再对右侧求值。若左侧表达式已能确定整个表达式的结果,右侧表达式不再求值,称为“短路”。

  • && 短路:左侧表达式为 0(假) 时,右侧不再执行;
  • || 短路:左侧表达式为非 0(真) 时,右侧不再执行。
  • 练习1:分析代码输出结果

    #include <stdio.h>
    int main()
    {
    int i = 0, a = 0, b = 2, c = 3, d = 4;
    i = a++ && ++b && d++;
    printf("a = %d\\nb = %d\\nc = %d\\nd = %d\\n", a, b, c, d);
    return 0;
    }

    • 输出:a=1, b=2, c=3, d=4
    • 原因:a++为0(假),&& 短路,右侧++b和d++未执行。

    若a=1,则:

    • 输出:a=2, b=3, c=3, d=5
    • 原因:a++为1(真),执行++b(b=3),再执行d++(d=5),整个表达式为真。

    练习2:分析代码输出结果

    #include <stdio.h>
    int main()
    {
    int i = 0, a = 1, b = 2, c = 3, d = 4;
    i = a++ || ++b || d++;
    printf("a = %d\\nb = %d\\nc = %d\\nd = %d\\n", a, b, c, d);
    return 0;
    }

    • 输出:a=2, b=2, c=3, d=4
    • 原因:a++为1(真),|| 短路,右侧++b和d++未执行。

    若a=0,则:

    • 输出:a=1, b=3, c=3, d=4
    • 原因:a++为0(假),执行++b(b=3,真),|| 短路,d++未执行。

    5. switch语句

    switch语句是特殊形式的if…else结构,适用于条件有多个结果的场景,使代码更易用、可读性更高。

    5.1 语法形式

    switch (expression)
    {
    case value1: statement;
    case value2: statement;
    ...
    default: statement;
    }

    • expression:必须是整型表达式;
    • case后的值:必须是整型常量表达式;
    • 功能:根据expression的值,执行对应case分支;无匹配值时,执行default分支。

    5.2 if语句和switch语句的对比

    练习:输入一个整数,计算除3后的余数

    if语句实现:

    #include <stdio.h>
    int main()
    {
    int n = 0;
    scanf("%d", &n);
    if(n % 3 == 0)
    printf("整除,余数为0\\n");
    else if(n % 3 == 1)
    printf("余数是1\\n");
    else
    printf("余数是2\\n");
    return 0;
    }

    switch语句实现:

    #include <stdio.h>
    int main()
    {
    int n = 0;
    scanf("%d", &n);
    switch(n % 3)
    {
    case 0:
    printf("整除,余数为0\\n");
    break;
    case 1:
    printf("余数是1\\n");
    break;
    case 2:
    printf("余数是2\\n");
    break;
    }
    return 0;
    }

    注意事项:

  • case和数字之间必须有空格;
  • 每个case语句执行完成后,需加break,否则会继续执行后续case语句(贯穿效应)。
  • 5.3 switch语句中的break

    break的作用是跳出switch语句,避免贯穿效应。

    示例(无break):

    #include <stdio.h>
    int main()
    {
    int n = 0;
    scanf("%d", &n);
    switch(n % 3)
    {
    case 0:
    printf("整除,余数为0\\n");
    case 1:
    printf("余数是1\\n");
    case 2:
    printf("余数是2\\n");
    }
    return 0;
    }

    运行结果:输入7(7%3=1),输出:

    余数是1
    余数是2

    原因:无break,执行case 1后继续执行case 2。

    5.4 switch语句中的default

    default用于处理无匹配case的情况。

    示例:输入1~7的数字,打印星期几;输入错误则提示

    #include <stdio.h>
    int main()
    {
    int day = 0;
    scanf("%d", &day);
    switch(day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    printf("工作日\\n");
    break;
    case 6:
    case 7:
    printf("休息日\\n");
    break;
    default:
    printf("输入错误\\n");
    break;
    }
    return 0;
    }

    5.5 switch语句中case和default的顺序

    case和default无固定顺序,可根据需求调整,但通常将default放在最后。

    6. while循环

    while是C语言三种循环语句之一,语法结构与if语句相似。

    6.1 if 和 while的对比

    // if语句:条件满足,执行一次
    if(表达式)
    语句;

    // while循环:条件满足,重复执行
    while(表达式)
    语句; // 循环体需包含多条语句时,用{}括起

    示例代码1(if语句):

    #include <stdio.h>
    int main()
    {
    if(1)
    printf("hehe\\n"); // 打印一次hehe
    return 0;
    }

    示例代码2(while循环):

    #include <stdio.h>
    int main()
    {
    while(1)
    printf("hehe\\n"); // 死循环打印hehe
    return 0;
    }

    6.2 while语句的执行流程

  • 执行判断表达式:值为0,循环结束;值不为0,执行循环语句;
  • 循环语句执行完后,回到表达式判断步骤,重复上述过程。 在这里插入图片描述
  • 6.3 while循环的实践

    练习:在屏幕上打印1~10的值

    #include <stdio.h>
    int main()
    {
    int i = 1;
    while(i <= 10)
    {
    printf("%d ", i);
    i = i + 1; // 循环变量调整
    }
    return 0;
    }

    运行结果:1 2 3 4 5 6 7 8 9 10

    6.4 练习:逆序打印整数的每一位

    题目:输入一个正整数,逆序打印其每一位(如输入1234,输出4 3 2 1)

    题目解析:

  • 用n%10获取最低位;
  • 用n = n/10去掉最低位;
  • 循环上述步骤,直到n变为0。
  • 参考代码:

    #include <stdio.h>
    int main()
    {
    int n = 0;
    scanf("%d", &n);
    while(n) // n != 0时循环
    {
    printf("%d ", n % 10); // 打印最低位
    n /= 10; // 去掉最低位
    }
    return 0;
    }

    7. for循环

    for循环是三种循环中使用最多的,语法简洁,维护性强。

    7.1 语法形式

    for(表达式1; 表达式2; 表达式3)
    语句; // 循环体需包含多条语句时,用{}括起

    • 表达式1:循环变量的初始化(仅执行1次);
    • 表达式2:循环结束条件的判断;
    • 表达式3:循环变量的调整。

    7.2 for循环的执行流程

    在这里插入图片描述

  • 执行表达式1(初始化循环变量);
  • 执行表达式2(判断条件):值为0,循环结束;值不为0,执行循环语句;
  • 执行表达式3(调整循环变量);
  • 回到表达式2,重复上述过程。
  • 7.3 for循环的实践

    练习:在屏幕上打印1~10的值

    #include <stdio.h>
    int main()
    {
    int i = 0;
    for(i = 1; i <= 10; i++)
    {
    printf("%d ", i);
    }
    return 0;
    }

    运行结果:1 2 3 4 5 6 7 8 9 10

    7.4 while循环和for循环的对比

    特点while循环for循环
    结构分布 初始化、判断、调整分散 初始化、判断、调整集中
    维护性 较差(代码多时易混乱) 较好(结构清晰)

    while循环实现打印1~10:

    #include <stdio.h>
    int main()
    {
    int i = 1; // 初始化
    while (i <= 10) // 判断
    {
    printf("%d ", i);
    i = i + 1; // 调整
    }
    return 0;
    }

    for循环实现打印1~10:

    #include <stdio.h>
    int main()
    {
    int i = 0;
    for(i = 1; i <= 10; i++) // 初始化、判断、调整集中
    {
    printf("%d ", i);
    }
    return 0;
    }

    7.5 练习:计算1~100之间3的倍数的和

    参考代码1:

    #include <stdio.h>
    int main()
    {
    int i = 0;
    int sum = 0;
    for(i = 1; i <= 100; i++)
    {
    if(i % 3 == 0)
    sum += i;
    }
    printf("%d\\n", sum);
    return 0;
    }

    参考代码2(优化):直接生成3的倍数,减少循环次数

    #include <stdio.h>
    int main()
    {
    int i = 0;
    int sum = 0;
    for(i = 3; i <= 100; i += 3) // 每次加3,直接生成3的倍数
    {
    sum += i;
    }
    printf("%d\\n", sum);
    return 0;
    }

    8. do-while循环

    do-while循环使用最少,特点是循环体至少执行一次。

    8.1 语法形式

    do
    语句; // 循环体
    while(表达式);

    • while和for循环:先判断条件,再执行循环体;
    • do-while循环:先执行循环体,再判断条件。

    8.2 do-while循环的执行流程

    在这里插入图片描述

  • 执行循环体语句;
  • 执行判断表达式:值不为0,继续循环;值为0,循环结束。
  • 8.3 do-while循环的实例

    练习:在屏幕上打印1~10的值

    #include <stdio.h>
    int main()
    {
    int i = 1;
    do
    {
    printf("%d ", i);
    i = i + 1; // 循环变量调整
    } while(i <= 10);
    return 0;
    }

    运行结果:1 2 3 4 5 6 7 8 9 10

    8.4 练习:计算整数的位数

    题目:输入一个正整数,计算其位数(如输入1234,输出4)

    参考代码:

    #include <stdio.h>
    int main()
    {
    int n = 0;
    scanf("%d", &n);
    int cnt = 0;
    do
    {
    cnt++; // 统计位数
    n = n / 10; // 去掉最低位
    } while (n); // n != 0时循环
    printf("%d\\n", cnt);
    return 0;
    }

    说明:即使输入n=0,do-while循环也会执行一次,正确统计0的位数(1位)。

    9. break和continue语句

    break和continue是用于控制循环流程的关键字,功能不同。

    9.1 break的作用

    执行break后,直接跳出当前所在的循环,继续往后执行。

    9.1.1 while循环中的break

    #include <stdio.h>
    int main()
    {
    int i = 1;
    while(i <= 10)
    {
    if(i == 5)
    break; // i=5时,终止循环
    printf("%d ", i);
    i = i + 1;
    }
    return 0;
    }

    运行结果:1 2 3 4

    9.1.2 for循环中的break

    #include <stdio.h>
    int main()
    {
    int i = 1;
    for(i = 1; i <= 10; i++)
    {
    if(i == 5)
    break; // i=5时,终止循环
    printf("%d ", i);
    }
    return 0;
    }

    运行结果:1 2 3 4

    9.1.3 do-while循环中的break

    #include <stdio.h>
    int main()
    {
    int i = 1;
    do
    {
    if(i == 5)
    break;
    printf("%d ", i);
    i = i + 1;
    } while(i <= 10);
    return 0;
    }

    运行结果:1 2 3 4

    9.2 continue的作用

    跳过本次循环中continue后边的代码,直接进入下一次循环判断。

    9.2.1 while循环中的continue

    #include <stdio.h>
    int main()
    {
    int i = 1;
    while(i <= 10)
    {
    if(i == 5)
    continue; // 跳过后续代码,进入下一次判断
    printf("%d ", i);
    i = i + 1; // 注意:i=5时,此语句被跳过,导致死循环
    }
    return 0;
    }

    运行结果:1 2 3 4(之后死循环)

    9.2.2 for循环中的continue

    #include <stdio.h>
    int main()
    {
    int i = 1;
    for(i = 1; i <= 10; i++)
    {
    if(i == 5)
    continue; // 跳过后续代码,进入i++调整
    printf("%d ", i);
    }
    return 0;
    }

    运行结果:1 2 3 4 6 7 8 9 10

    9.2.3 do-while循环中的continue

    #include <stdio.h>
    int main()
    {
    int i = 1;
    do
    {
    if(i == 5)
    {
    i = i + 1; // 避免死循环,手动调整i
    continue;
    }
    printf("%d ", i);
    i = i + 1;
    } while(i <= 10);
    return 0;
    }

    运行结果:1 2 3 4 6 7 8 9 10

    10. 循环的嵌套

    三种循环(while、do while、for)可相互嵌套,解决复杂问题。

    练习:找出100~200之间的素数并打印

    素数定义:只能被1和本身整除的数字。

    题目解析:

  • 用外层循环产生100~200之间的数字;
  • 用内层循环产生2~i-1之间的数字,试除i;
  • 若存在能整除i的数字,i不是素数;否则i是素数。
  • 参考代码:

    #include <stdio.h>
    int main()
    {
    int i = 0;
    // 外层循环:产生100~200的数字
    for(i = 100; i <= 200; i++)
    {
    int j = 0;
    int flag = 1; // 假设i是素数
    // 内层循环:判断i是否为素数
    for(j = 2; j < i; j++)
    {
    if(i % j == 0)
    {
    flag = 0; // 不是素数,修改flag
    break; // 跳出内层循环
    }
    }
    if(flag == 1)
    printf("%d ", i); // 打印素数
    }
    return 0;
    }

    11. goto语句

    goto语句可在同一个函数内跳转到指定好的标号处。

    11.1 语法形式

    goto 标号;
    // …
    标号: 语句;

    11.2 基本用法

    #include <stdio.h>
    int main()
    {
    printf("hehe\\n");
    goto next;
    printf("haha\\n"); // 被跳过,不执行
    next:
    printf("跳过了haha的打印\\n");
    return 0;
    }

    运行结果:

    hehe
    跳过了haha的打印

    11.3 多层循环中快速跳出

    goto语句如果使用不当,会导致函数内部随意乱跳转,打乱程序流程,所有建议尽量避免使用。但是,goto在多层循环中可快速跳出所有循环,比break更方便:

    for(...)
    {
    for(...)
    {
    for(...)
    {
    if(disaster)
    goto error; // 直接跳转到error标号处
    }
    }
    }
    error:
    // 后续处理代码

    赞(0)
    未经允许不得转载:171主机测评 » C语言从入门到进阶——第3讲:分支和循环(上)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址