c-为什么把bool改成任何数据类型,代码仍然可以完美工作



当给定一个数字n时,程序一次检查一个n的数字,将每个数字存储到digit变量中,然后将其用作digit_seen的索引。

如果digit_seen[ digit ]为false,则该数字以前从未出现过,因此程序将digit_seen[ digit ]设置为true并继续运行。正如K.N.King在C编程-现代方法中所解释的:

注意!

将bool数据类型更改为任何数据类型(char、int、float(仍然可以得到正确的结果。这怎么不是一个案子???

/*
** Checks number for repeated digits
*/
#include <stdio.h>
#include <stdbool.h>
int main()
{
int digit;  
bool digit_seen[ 10 ] = { false };
long n;
printf( "Enter a number: " );
scanf( "%ld", &n );
while( n > 0 ){
digit = n % 10;
if( digit_seen[ digit ] )
break;
digit_seen[ digit ] = true;
n /= 10;
}
if( n > 0 )
printf( "Repeated digitn" );
else
printf( "No repeated digitn" );
return ( 0 );
}

在C中,条件(while/for循环、if等(只是测试表达式的求值结果是否不等于0。

因此:

if (a)

是同一件事:

if (a != 0)

C中的布尔值只是被定义为一种可以取两个值之一的类型,true(1(和false(0(。

运算符><>=<===!=&&||!都是以1或0为结果的运算符。

如果您检查<stdbool.h>库,您会发现:

#define false 0
#define true  1

任何基元类型都能够容纳这两个值。

相关内容

最新更新