2010-11-16 38 views
3

Ceci est une version simplifiée de mon code:Besoin d'aide pour déterminer boucle infinie

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

Le problème est avec la boucle en courant pour toujours, mais je me attends à arrêter après le dernier chiffre 1. Et ma sortie attendue est t = 20.

+0

Votre sortie sera "t = 8". Votre code traite les chaînes en ajoutant tous les chiffres ensemble, sans tenir compte des opérateurs. En outre, vous devriez envisager d'utiliser 'strtol()' pour traiter les nombres. 'int t = 0; while (* s) {if (isdigit (* s)) t + = strtol (s, & s, 10); } 'ferait le tour je crois, au moins jusqu'à ce que vous vouliez ajouter la multiplication et la division. Même alors, vous devriez toujours rester avec 'strtol()'. –

Répondre

12

s n'est pas incrémentée si *s est un chiffre, d'envisager de supprimer la clause else, ce qui rend le code dans ceci:

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

    ++s; 
} 
3

@Hasturkun vous a donné la bonne réponse, mais c'est le genre d'une chose un débogueur pourrait vous aider, si vous en avez un disponible. Parcourez le code et vous verrez rapidement qu'il n'exécute pas la ligne ++s;.

0

votre autre condition est pas remplie

essayer cette

si (isdigit (* s))

t + = * s - '0';

s++;