Bonsoir à tous , j'ai l'exercice suivant :

écrire un programme en C qui affiche l'histogramme de la longueur ds mots rencontrés en entrée .
fonctions autorisées : getchar , putchar , printf
utilisation de boucles , variables , tableaux ( 1 seul tableau ) , rien d'autre .

Voici l'algorithme en français :

1Je parcours la chaine de caractère en entrée , chaque fois que j'arrive à la fin d'un mot je compte les lettres du mot , et j'incrémente la case du tableau correspondante , si le mot fait 5 lettres j'incrémente la case 5 .

2. je parcours le tableau tout en affichant l'histogramme , et une autre variable lit la valeur dans chaque case et affiche le signe _ tant que ce n'est pas fini .

exemple de ce que doit faire le programme :

phrase reçue en entrée :

Bonsoir , comment te portes tu petit coq , hi hi .

résultat à l'écran :

1:
2: ____
3: _
4:
5: _
6: _
7: _
8: _
9:

ce qui veut dire , 0 mot de 1 lettre , 4 mots de 2 lettres ...

voici mon code en C , je sais qu'il est presque bon mais il y a une petite erreur à mon avis sur la fin avec la variable i , car mon programme m'affiche un défilement infini de _ _ _ _ _

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
26
27
28
29
30
31
32
33
34
 
#include  <stdio.h>
 
int main(void) 
{
  int a, i, j;;
  int nlettre[10];
  int nl = 0;
 
 
 
  while ( ( a = getchar() ) != EOF && nl < 10) 
{
    if ( a == ' ' || a == '\n' || a == '\t' )
      nl=0;
    else
      nl++;
    nlettre[nl]++;
  }
 
  for ( j = 0; j < 10; j++) 
{
    printf("%d :", j);
    for (  i=0; i<nlettre[j]; i++) 
{
      printf("_");
    }
  }
  return 0;
}
 
le début est bon , je suis certain que le blème vient de la dernière boucle for...
 
PS : je n'ai pas besoin de rajouter de variables ni de tableaux , tout y est , mais mal disposé je pense , merci de votre aide .