Exercice en programme c

Résolu
Bonjour, j'ai essayer de corriger cet exercice en c mais j'ai pas eu une bonne exécution j'ai besoin d'aide .voici l'exercice puis mon essai.
exercice:
Ecrire un programme C qui accepte un texte qui se termine par le caractère `#' et qui affiche en sortie :

1/ Le nombre de caractères minuscules
2/ Le nombre de caractères majuscules
3/ Le nombre de chiffres
4/ Le nombre de lignes
5/ Le nombre de séparateurs
6/ La longueur du mot le plus long
mon essai:
#include<stdio.h>
#include<conio.h>
main()
{ char c;
int nmin=0,nmaj=0,nch=0,nlig=1,nsep=0,l=0,max=0;
c=getchar()
while (c!='#')
{if((c<='A')&&(c<='Z'))
nmaj=nmaj+1;
else
if((c<='a')&&(c<='z'))
nmin=nmin+1;
else
{ if(c==' `)||c=='\n `||c=='. `||c==', `)
nsep=sep+1;
else{ if(c=='\n `)
nlig=nlig+1;
else if(c==' `)||c=='\n `||c=='. `||c==', `)
{if(l>max)
max=1;
l=0;}
else l=l+1;

}}}

printf(« Le nombre de caractères minuscules est %d\n »,nmin) ;
printf(« Le nombre de caractères majuscules est %d \n»,nmaj) ;
printf(« Le nombre de chiffres est %d\n »,nch) ;
printf(« Le nombre de lignes est %d\n »,nlig) ;
printf(« Le nombre de séparateurs est %d\n »,nsep) ;
printf(« La longueur du mot le plus long est%d\n »,max) ;
getch() ;
}

6 réponses

  1. Salut,
    Donc, déjà y a une erreur dans tes deux premiers if : il faut que c soit supérieur ou égal a 'a' et 'A' et non pas "<=".
    Sinon, pourquoi entoures-tu tes caractères d'une quote ' et d'un backquote ' ? Entoures les juste avec des quotes (ex: c=='\n').
    Si tu as d'autre erreurs, il pourrait être intéressant de savoir ce qu'affiche exactement ton programme et si tu n'as pas de warning ou erreur a la compilation.
    1. A première vu, tu ne fais qu'un c=getchar() en début
      et ensuite un while (c !='#'), du coup tu pars en boucle infini
      il faudrait commencer par :
      c=getchar ();
      while (c != '#') {
      ...
      c=getchar ();
      }
      
      1. Ouch, en effet, je n'avais pas vu ca...^^
    2. MERCI POUR L'AIDE.VOICI UN NOUVEAU ESSAI:
      #include<stdio.h>
      #include<conio.h>
      main()
      { char c;
      int nmin=0,nmaj=0,nch=0,nlig=1,nsep=0,l=0,max=0;
      c=getchar();
      while (c!='#')
      {if((c<='A')&&(c<='Z'))
      nmaj=nmaj+1;
      else {
      if((c>='a')&&(c<='z'))
      nmin=nmin+1;
      else
      { if(c==' '||c=='\n'||c=='.'||c==',')
      nsep=nsep+1;
      else{ if(c='\n')
      nlig=nlig+1;
      else if(c==' '||c=='\n'||c=='.'||c==',')
      {if(l>max)
      max=1;
      l=0;}
      else l=l+1;

      }}}c=getchar();}

      printf(" Le nombre de caractères minuscules est %d\n ",nmin) ;
      printf(" Le nombre de caractères majuscules est %d \n",nmaj) ;
      printf(" Le nombre de chiffres est %d\n ",nch) ;
      printf(" Le nombre de lignes est %d\n ",nlig) ;
      printf(" Le nombre de séparateurs est %d\n ",nsep) ;
      printf(" La longueur du mot le plus long est%d\n ",max) ;
      getch() ;
      }
      1. Je me suis permis de clarifier ton code et de corriger deux trois erreurs. j'ai commente ce que j'avais pour que tu comprennes, dis-moi si ce n'est pas assez clair.
        Juste une précision avant de partir, tu peux mettre des balises
         pour poster du code, ca simplifie la lecture :
        <code>
        #include<stdio.h>
        #include<conio.h>
        
        main()
        {
          char c;
          int nmin=0,nmaj=0,nch=0,nlig=1,nsep=0,l=0,max=0;
          c=getchar();
          while (c!='#')
            {
              if((c>='A')&&(c<='Z')) //Verifie que c'est une majuscule - tu avais oublie d'inverser le chevron
        	nmaj=nmaj+1;
              else if((c>='a')&&(c<='z'))// Verifie que c'est une minuscule
        	nmin=nmin+1;
              else if(c==' '||c=='\n'||c=='.'||c==',')// J'ai remis tous les separateurs ensemble, c'est plus clair et plus logique.
        	{
        	  nsep=nsep+1; //C'est un separateur donc tu increment nsep
        	  if (c=='\n') //si c'est aussi un saut de ligne, tu increment nlig
        	    nlig=nlig+1;
        	  if(l>max) // Si le mot que tu vient de lire est plus long que l'ancien, tu stocke la nouvelle longueur max.
        	    max=l;
        	  l=0; //Tu viens de lire un separateur donc tu commence un nouveau mot
        	}
              l=l+1; //a incrementer quoiqu'il arrive, pas dans un else sinon, on pourrait entrer dans le tout premier if et cette valeur ne serait pas incrementee...
              c=getchar();
            }
          
          printf(" Le nombre de caractères minuscules est %d\n ",nmin) ;
          printf(" Le nombre de caractères majuscules est %d \n",nmaj) ;
          printf(" Le nombre de chiffres est %d\n ",nch) ;
          printf(" Le nombre de lignes est %d\n ",nlig) ;
          printf(" Le nombre de séparateurs est %d\n ",nsep) ;
          printf(" La longueur du mot le plus long est%d\n ",max) ;
          getch() ;
        }


        tu utilisais deux if pour tes séparateurs, il y en avais donc un qui n'était jamais utilise... J'ai remplace tes "else { if" par des "else if", c'est plus propre et ca simplifie le code.
        1. si tu fais :
          if((c<='A')&&(c<='Z')
          

          tu regardes si c est inf ou égal à 'A', or il faut qu'il soit supérieur ou égal :
          if (c >= 'A' && c <= 'Z')
          nmaj++
          

          de même pour les minuscules.

          pour ton nombre de ligne, tu ne rentre jamais dans ton test
          else{ if(c='\n') 
          nlig=nlig+1; 
          

          car tu es passé dans le if du dessus en amont
          pour les chiffres il faut faire pareil que les lettres :
          if ( c >= '0' && c <='9')