上一节的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循环的起始)。