当给定一个数字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
任何基元类型都能够容纳这两个值。