《C语言教程》06章 while语句


一、while语句和do...while语句的比较

while语句是先判断条件为“真”时才循环,do...while语句是先进入循环再判断条件为“假”来决定是否终止循环。

int i, sum=0;               int i, sum=0;

scanf("%d", &i);            scanf("%d", &i);
while (i <= 10) {           do {
    sum = sum + i ;             sum = sum + i ;
    i++;                        i++;
}                           } while (i <= 10) ;

当输入小于等于10的数时,两个结果完全一样,当输入大于10的数时,左边结果为0,右边结果为输入的数。说明左边未进入循环,而右边循环了一次。

二、break语句和continue语句

当运行到break语句或continue语句时,其后面的语句都不再运行。但不同的是:break语句中止了循环,从循环后面的语句开始运行;而continue语句并不中止循环,而是跳到循环的头部开始下一轮循环。


#include <stdio.h>

int main(void)
{
    int i, sum=0;

    while (1) {
        scanf("%d", &i);

        if (i > 10 || i < 0) {
            printf("请输入小于10的正数\n");
            continue;
        }
        else if (i == 0) {
            printf("退出循环\n");
            break ;
        }

        sum = 0;
        do {
            sum = sum + i ;
            i--;
        } while(i > 0);

        printf("sum = %d\n", sum);
    }

    return 0;
}

三、goto语句

goto语句的使用危险性很大,一般不建议使用,但在多重循环的情况下,要终止到指定的某一层循环时,用goto的确很省事。使用goto语句要注意以下几点,否则编译并不一定出错,但程序很危险。下面的例子就很危险。

  1. 不能跨函数跳转。
  2. 只能从块内向块外跳转,不能从块外跳到块内。


#include <stdio.h>

int main(void)
{
    int x, y;
    scanf("%d", &x);
    scanf("%d", &y);
    if (x == 0) {
        printf("aaaaaa\n");
        goto LA1;    //这是很危险的做法
    }

    if (y == 100) {
LA1:
        printf("bbbbbb\n");
    }

    return 0;
}