什么是"而(真实)"在平原C?

时间:2015-06-06 04:24:58

标签: c algorithm

由于C没有bool s,在使用

的算法中代替true的适当变量是什么?
do
{
   // ... 
} while(true);

???

适当的C程序员应该

do
{
   // ... 
} while(1);

或是否保留一个特定变量来表示" s omething is not zero / NULL " ?

4 个答案:

答案 0 :(得分:12)

现在通常我会看到

while(1) {
    ...
}

以前常见的是

for(;;) {
    ...
}

这一切都得到了重点。

答案 1 :(得分:10)

你的问题实际上不是关于bool(如果你#include <stdbool.h>,现代C 会有什么),这是关于编写无限循环的最佳方式。

常用习语是:

while (1) {
    /* ... */
}

for (;;) {
    /* ... */
}

后者看起来有点模糊,但它的定义很明确。可以省略for循环头中的三个表达式中的任何一个;如果第二个表达式(它控制循环继续执行的时间)被省略,则默认为true。

while (1)可能是最简单的方法 - 但有些编译器可能会警告一个总是正确的情况。 for (;;)可能会避免这种情况,因为没有(明确的)表达式来警告。

编写无限循环(while (1 + 1 == 2)等等有一些比较棘手的方法,但它们都不值得付出努力。

答案 2 :(得分:5)

如果你正在使用c89:

创建一个布尔定义:

typedef int bool;
#define true 1
#define false 0

或常数:

/* Boolean constants. */
#define TRUE 1
#define FALSE 0

这给了int一个含义。

或者(如本文其他地方所述)如果使用c99:

#include <stdbool.h>

我最近的大学经历是,他们要求你使用c89。

http://en.wikipedia.org/wiki/C_data_types#stdbool.h

答案 3 :(得分:3)

C有stbool.h个头文件,可以使用bool个变量。

所以这是有效的

#include <stdio.h>
#include<stdbool.h>
int main(void) {
    int i=1;
    while(true)
    {
        if(i==3){       
        break;
        }
        printf("%d\n",i);
        i++;
    }
return 0;
}

输出

1  
2

注意:现代 C99 支持bool个变量但 C89 / 90 没有。

如果您使用的是C89 / 90,那么您可以使用其中一个答案中提到的typedefconstants,或者您也可以使用enums

   typedef enum {false, true } bool;    
   bool b=true;
   int i=1;
   while(b)
   {
        if(i==3){       
        break;
        }
        printf("%d\n",i);
        i++;
    }

输出

1  
2

您可以查看bool in C

希望它对你有所帮助。