这是我的代码的简化版本:
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
。
答案 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++;