IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Compteur de caractéres


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 96
    Par défaut Compteur de caractéres
    salut les pro,

    j'ai essayé d’écrire un programme simple en c permettant de calculer la fréquence d'apparition de caractères (majuscule de A à Z) mais un petit problème avec de le test d'arret :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    int main(int argc , char* argv[]){
     
    	int nb[25];
    	int i;
    	char c;
     
    	for(i=0;i<26;i++)
    		nb[i]=0;
     
    	do{   
       		c  = getchar();
    		if(c>64 && c<=90){
    			nb[c-65]++ ;
    		}
    		printf("je suis la \n");
    	}while(c != '\n');
     
    	for(i=0;i<26;i++){
    		if(nb[i]!=0)
    			printf("%c == %d\n",(i+'A'),nb[i]);
    	}
     
    	return 0;
    }
    Merci d'avance

  2. #2
    Membre émérite
    Avatar de Kirilenko
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 234
    Par défaut
    Bonsoir,

    En fait, ton problème est multicausal. Le soucis de départ est que que tu lis en dehors de ton tableau nb. N'oublie pas que les indices des tableaux vont de 0 à n-1. Quand i = 25, tu lis donc une case en dehors de ton tableau. Techniquement, cette situation conduit à un comportement indéterminé. Dans la pratique, pour ton cas, tu modifies la zone mémoire qui se situe juste après nb. Et là, pas de chance : c'est i qui se situe juste après nb en mémoire. Donc, à chaque fois que i = 25, tu vas réinitialiser i à 0 (note qu'en cas de comportement indéterminé, tout peut arriver). Cela provoque donc une boucle infinie.

    Pour le reste de ton programme, il y a quelques habitudes pas terribles dont il convient de se débarrasser. Par exemple, utiliser des constantes numériques pour représenter des caractères manque singulièrement de lisibilité. Tu pourrais plutôt utiliser des constantes caractère ('a', 'z', etc.). Mieux encore, pour éviter de réinventer la roue, tu as, à ta disposition, la fonction isupper de <ctype.h>.

    Bon codage !
    Récursivité en C : épidémie ou hérésie ?

    "Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman

Discussions similaires

  1. Compteur de caractères
    Par Marc_27 dans le forum ASP.NET
    Réponses: 18
    Dernier message: 22/01/2010, 16h32
  2. compteur de caractère pour 5 textaera
    Par anca2 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/06/2009, 20h36
  3. Compteur de caractères petit blocage.
    Par fx_web dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 17/01/2009, 12h32
  4. Compteur de caractères lors d'un saut de ligne
    Par blueman dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/06/2006, 10h08
  5. Compteur de caractères dans textarea en temps réél
    Par Jherek dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/03/2006, 18h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo