捕获C中字符串的结尾/检查字符串是否为整数

时间:2014-05-26 12:34:49

标签: c string

我在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没有更新代码。

2 个答案:

答案 0 :(得分:2)

您正在s表达式测试中递增while。因此,您需要检查&#34; next&#34;人物一直都在。

第二个版本看起来没问题,虽然我会用for来编写它,因为它更清楚:

for(; *s != '\0'; ++s) {
 ...
}

也许您未能正确编译该程序。

您应该向printf()添加换行符,因为标准输出通常是行缓冲的。

答案 1 :(得分:0)

好的,它正在发挥作用。我搞砸了makefile。