从头学C(29)do-while循环

0

上一节的while和for循环都是在循环体执行之前,先进行条件的判断,今天将要看到的是C语言的第三种循环:先执行循环体,再进行条件的判断,保证循环体至少被执行一次。

第三章 控制流 >> 3.6 do-while循环

1. 语法格式

do-while循环的语法形式如下:

do
    语句
while (表达式);

执行规则是:先执行语句,再判断表达式,如果为真(即值不为0),则再次执行语句,以此类推;如果某一次判断表达式为假(即值为0),则跳出循环。

尽管实际使用过程中,do-while循环比while循环或for循环都要少得多,但不能否认有时候它还是非常有用的!

2. 实例:把数字转换为对应的字符串

itoa函数式atoi函数的逆函数,按照atoi函数中的逻辑,数字转换成字符串后,该字符串的次序刚好是颠倒的,所以我们还要调用上一节的reverse()函数。

#include <stdio.h>
#include <string.h>

/* reverse: reverse string a in place */
void reverse(char s[])
{
        int c, i, j;

        for (i = 0, j = strlen(s)-1; i < j; i++, j--)
        {   
                c = s[i];
                s[i]= s[j];
                s[j]= c;
        }   
}
/* itoa: convert n to characters in s */
void itoa(int n, char s[])
{
        int i, sign;

        if ((sign = n) < 0) /* record sign */
                n = -n;     /* make n positive */
        i = 0;
        do {    /* generate digits in reverse order */
                s[i++] = n % 10 + '0'; /* get next digit */
        } while ((n /= 10) > 0); /* delete it */
        if (sign < 0)
                s[i++] = '-';
        s[i]='\0';
        reverse(s);
}

int main()
{
        int num = 1234567890;
        char str[10];

        itoa(num, str);

        printf("num = %d, str = %s\n", num, str);

        return 0;
}

这里有必要使用do-while语句,是因为即使n为0,也需要把一个字符放到数组s中去。

尽管只有一条语句,但我们还是用花括号将语句括起来,避免引起不必要的歧义(被误认为是另一个while循环的起始)。

Leave A Reply