我是C编程的新生,我试图看看我是否能够理解do while循环。我对for循环有一点点内存,但在while循环中没有任何内容。
我尝试过在线视频,但我对它们并不擅长。感谢
答案 0 :(得分:2)
嗯:希望以下帮助你。
示例语法为:
do{
statement(x);
}while(condition);
请注意,条件表达式出现在循环的末尾,因此循环中的语句(x)在测试条件之前执行一次。
如果条件为真,则控制流跳回来执行,循环中的语句(x)再次执行。重复此过程,直到给定条件变为假。
试试这段代码你就会很好:
#include <stdio.h>
int main ()
{
// local variable definition
int x = 5;
// do loop execution
do
{
printf("value of x: %d\n", x);
x = x + 1;
}while( x < 10 );
return 0;
}
答案 1 :(得分:0)
这是理解while
循环与do
/ while
循环之间差异的绝佳方式。
(但首先,附注:do
/ while
在实践中实际上非常罕见。您通常不需要它们。您通常想要编写的优秀,干净的算法,对于任何输入自然都做正确的事情,并且在没有输入时正确地做任何事情,通常最终都是用while
循环来编写的。&#34; while (there's something to do) { do something; }
&#34;。但有时候do
/ while
循环正是你想要的。)
假设您正在尝试将整数转换为字符串,即构造一个包含整数的基数10表示的字符串,基本上就像printf
%d
一样。这是一项标准练习。这是标准解决方案:
void itoa(int n, char buf[], int size)
{
char *p = buf;
while(n > 0)
{
if(p >= &buf[size-1]) abort();
*p++ = n % 10 + '0';
n /= 10;
}
*p = '\0';
strrev(buf);
}
我们使用%
运算符生成数字,将它们填充到目标数组中。这种技术的标准附加困难是它以错误的顺序生成数字;补偿的标准方法是使用字符串反转功能。无论如何,这里是字符串反转功能和一个小测试驱动程序,所以你可以尝试一下:
void strrev(char str[])
{
char *p1 = str, *p2;
for(p2 = str; *p2 != '\0'; p2++)
;
p2--;
while(p1 < p2)
{
char tmp = *p1;
*p1 = *p2; *p2 = tmp;
p1++; p2--;
}
}
所以继续输入代码并编译它,并使用它。您应该发现它可以正常输入您可以输入的任何数字,除了......
它不适用于零!如果输入0,则测试while(n > 0)
会立即失败,我们在循环中进行零跳,我们不计算数字,并生成一个空字符串。
所以:假设您想要生成字符串"0"
为零。换句话说,假设我们总是希望在循环中至少进行一次旅行,即使n
最初是0
。这听起来像...... do
/ while
的工作!只需重写这样的循环 - 相同的主体,相同的条件(n > 0)
,但是在循环的底部而不是在顶部测试条件:
do {
if(p >= &buf[size-1]) abort();
*p++ = n % 10 + '0';
n /= 10;
} while(n > 0);
试试这个,你会发现它为正数生成了相同的输出,和现在它也可以按照0
的预期工作。
(但是,如果您想知道,这个简单代码无法处理的另一件事,do
/ while
修改无法解决,则为负数。)< / p>