while 循环


C 提供while循环式,它根据你所指定的条件式来判断是否执行循环本体,语法如下所示:

while(条件式) { 
    语句一; 
    语句二; 
}

如果循环本体只有一个语句,则while{}可以省略不写,然而基于可读性,建议还是写出来;while主要用于结束条件发生时机无法确定的重复性动作,例如一个使用者输入接口,使用者可能输入 10 次,也可能输入 20 次,这时循环停止的时机是未知的,你可以使用while循环来作这个事。

一个计算输入成绩平均的程序如下所示:

#include <stdio.h>

int main(void) {
    int score = 0; 
    int sum = 0; 
    int count = -1; 

    while(score != -1) { 
        count++; 
        sum += score; 
        printf("输入分数(-1结束):");
        scanf("%d", &score);
    } 

    printf("平均:%f\n", (double) sum / count ); 

    return 0;
}

执行结果:

输入分数(-1结束):87
输入分数(-1结束):77
输入分数(-1结束):99
输入分数(-1结束):-1
平均:87.666667

在这个程序中,使用者的输入次数是未知的,所以使用while循环来判断使用者的输入是否为 -1,以作为循环执行的条件。

while循环常被称为前测式循环,因为它在循环执行前就会进行条件判断,而do while称之后测式循环,它会先执行循环本体,然后再进行条件判断,do while的语法如下所示:

do { 
    语句一; 
    语句二; 
    .... 
} while(条件式);

注意while后面是以分号(;)作为结束,这个很常被忽略;由于do while会先执行循环,所以它通常用于进行一些初始化化或接口沟通的动作,例如下面这个程序:

#include <stdio.h>

int main(void) {
    int input = 0;
    int replay = 0;

    do {
        printf("输入整数值:");
        scanf("%d", &input);
        getchar();

        printf("输入数为奇数?%c\n", ((input % 2) ? 'Y': 'N'));
        printf("继续(1:继续 0:结束)?");
        scanf("%d", &replay);
        getchar();
    } while(replay);

    return 0;
}

执行结果:

输入整数值:11
输入数为奇数?Y
继续(1:继续 0:结束)?0




展开阅读全文