我在C中有一段有趣的代码:
int is_digit( char c){
return ( c >= '0' && c <= '9' ) ? 1 : 0;
}
int is_number( char * s ){
while( *s++ ){
printf("%d", is_digit(*s));
if( !is_digit(*s) ) return 0;
}
return 1;
}
它为1110
is_number("8888");
我用gcc -Wall -W
编译它 - 没有警告也没有错误
但它不正确(不检查第一个字符),所以我想这样做:
int is_number( char * s ){
while( *s ){
printf("%d", is_digit(*s));
if( !is_digit(*s) ) return 0;
s++;
}
return 1;
}
相同的编译选项,没有警告,循环永远。
为什么吗
编辑: 好的,它正在工作。另一个功能是导致错误。错误的makefile没有更新代码。
答案 0 :(得分:2)
您正在s
表达式测试中递增while
。因此,您需要检查&#34; next&#34;人物一直都在。
第二个版本看起来没问题,虽然我会用for
来编写它,因为它更清楚:
for(; *s != '\0'; ++s) {
...
}
也许您未能正确编译该程序。
您应该向printf()
添加换行符,因为标准输出通常是行缓冲的。
答案 1 :(得分:0)
好的,它正在发挥作用。我搞砸了makefile。