如何知道C编程中的while while循环

时间:2015-07-06 20:33:36

标签: c

我是C编程的新生,我试图看看我是否能够理解do while循环。我对for循环有一点点内存,但在while循环中没有任何内容。

  • 我希望看到示例,并了解如何使用它们。我会 真的很喜欢它,如果你不打击我,因为我是新的,没有其他 平台问。我们的老师说我们应该提前阅读 正是我想要做的。谢谢。

我尝试过在线视频,但我对它们并不擅长。感谢

2 个答案:

答案 0 :(得分:2)

嗯:希望以下帮助你。

  • 与for和while循环不同,后者在顶部测试循环条件 在循环中,C编程语言中的do ... while循环检查它 环路底部的条件
  • 一个do ... while循环类似于while循环,除了do ... while循环保证至少执行一次。

示例语法为:

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>