2010-11-16 1 views
3

Это упрощенная версия моего кода:Нужна помощь выяснить бесконечный цикл

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; 
} 

Проблема с петлей во время работы навсегда, хотя я ожидал его, чтобы остановить после последней цифры 1. И мой ожидаемый результат: t = 20.

+0

Ваш выход будет «t = 8». Ваш код обрабатывает строки, добавляя все цифры вместе, не обращая внимания на операторов. Кроме того, вы должны использовать 'strtol()' для обработки чисел. 'int t = 0; while (* s) {if (isdigit (* s)) t + = strtol (s, & s, 10); } 'на самом деле сделал бы трюк, который я считаю, по крайней мере, пока вы не захотите добавить умножение и деление. Даже тогда вы все равно должны придерживаться 'strtol()'. –

ответ

12

s не увеличивается, если *s это цифра, считает удаление пункта еще, что делает код в этом:

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

    ++s; 
} 
3

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

0

ваше другое условие не выполняется

попробовать этот

если (isdigit (* s))

т + = * с - '0';

s++;