需要帮助找出无限循环

时间:2010-11-16 10:43:50

标签: c while-loop infinite-loop

这是我的代码的简化版本:

void calc(char *s)
{
    int t = 0;
    while (*s)
    {
        if (isdigit(*s))
            t += *s - '0';
        else
            ++s;
    }
    printf("t = %d\n", t);
}

int main(int argc, char* argv[])
{
    calc("8+9-10+11");
    return 0;
}

问题在于while循环永远在运行,尽管我希望它在最后一个数字1之后停止。我的预期输出是t = 20

3 个答案:

答案 0 :(得分:12)

如果s是一个数字,

*s不会递增,请考虑删除else子句,将代码转换为:

while (*s)
{
    if (isdigit(*s))
        t += *s - '0';

    ++s;
}

答案 1 :(得分:3)

@Hasturkun已经给出了正确的答案,但如果您有一个可用的调试器可以帮助您。逐步执行代码,您很快就会看到它没有执行++s;行。

答案 2 :(得分:0)

你的其他条件未得到满足

试试这个

if(isdigit(* s))

t + = * s - '0';

 s++;