Нужна помощь в выяснении бесконечного цикла - PullRequest
3 голосов
/ 16 ноября 2010

Это упрощенная версия моего кода:

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 ]

12 голосов
/ 16 ноября 2010

s не увеличивается, если *s является цифрой, рассмотрите возможность удаления предложения else, превращая код в следующее:

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

    ++s;
}
3 голосов
/ 16 ноября 2010

@ Hasturkun дал вам правильный ответ, но это то, с чем может помочь отладчик, если он у вас есть. Пройдите по коду, и вы быстро увидите, что он не выполняет строку ++s;.

0 голосов
/ 16 ноября 2010

ваше условие не выполнено

попробуйте это

if (isdigit (* s))

t + = * s - '0';

 s++;
...