Getchar (langage C)

Résolu
Bonsoir,

j'ai un code qui demande à l'utilisateur d'entrer une chaine et ensuite d'afficher seulement le nombre de caractère. Quand je le fais, il ne m'affiche rien ou si je met un ";" après le for, j'ai le nombre de caractère qui s'affiche mais du début à la fin........ 0,1,2,3,4,...........123 (par exemple)

Si quelqu'un sait m'aiguiller sur une solution pour juste afficher le nombre de caractère ; je suis preneur....
Voici mon code :

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int nc;
  for (nc=0; getchar() != EOF ; nc++);

    printf("%d\n", nc);
    return 0;
}
Configuration: Linux
Firefox 3.0

9 réponses

  1. Re,

    voici un autre code qui ne fonctionne pas...

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
      int c, ne, nt, nf;
      ne = nt = nf = 0; //nombre d'espace, tabulation et fin de ligne
      while (( c = getchar ()) != EOF)
      {
          if (c == ' ')
          ++ne;
          if (c == '\t')
          ++nt;
          if (c == '\n')
          ++nf;
      }
      printf("%d %d %d\n", ne, nt, nf);
        return 0;
    }


    J'ai bien comme retour ce que l'utilsiateur note mais pas les réponses demandée...

    Merci d'avance pour votre aide
    2
    1. Contributeur
      Salut,
      Essaie :
      #include <stdio.h>
      
      int main(){
          int nc;
          for(nc=0;(char)getchar()!='\n';nc++);
      
          printf("%d\n",nc);
      
          return 0;
      }
      

      Ca devrait marcher.

      Cdt
      1
      1. Salut FIddy,

        à quoi sert le char entre parenthèse...
        0
        1. Contributeur
          getchar() retourne un int, et '\n' est un char. Il faut donc caster, pour faire du code propre. Mais bon c'est pas obligé ;)
          0
      2. J'ai essayé de cette manière et rien n'y fait je dois faire une grosse erreur de débutant et je ne vois pas laquelle,

        Voici l'autre code...

        #include <stdio.h>
        #include <stdlib.h>
        
        int main()
        {
          int c, ne, nt, nc;
        
          while (( c = getchar ()) != EOF)
          {
              for (nc=0; getchar() != EOF; nc++)
              ++nc;
            for (ne=0; getchar() != EOF; ne++)
              ++ne;
            for (nt=0; getchar() != EOF; nt++)
              ++nt;
          }
          printf("%d %d %d\n", nc, ne, nt);
            return 0;
        }
        
        0
        1. Contributeur
          Dans mon post précédent, je t'ai donné la solution.
          N'utilise pas EOF, mais '\n'.
          Et je vois pas pourquoi tu fais un ++nc. Tu n'as pas besoin.
          0
          1. Salut Fiddy,

            j'ai changé mon code mais quand je compte le nombre de mot j'ai toujours 0...
            Peux-tu jeter un oeil...

            #include <stdio.h>
            
            int main(){
                int c;
                int nc = 0, nm = 0; // nc = nbre de caractère
                                    // nm = nbre de mot
                for(nc=0;(c=getchar()!='\n');nc++)
                {
                if (c == ' ')
            
                nm++;
                }
            
            
                printf("%d %d\n",nc, nm);
            
                return 0;
            }
            
            0
            1. Contributeur
              Re,
              Oui c'est normal, car tu as mis les parenthèses au mauvais endroit, ainsi c prend la valeur de la comparaison de getchar() avec '\n' qui vaut soit 0 ou 1, donc jamais égale à la valeur ascii de ' '.
              Là, ce code devrait marcher.
              #include <stdio.h>
              
              int main(){
                  int c;
                  int nc = 0, nm = 0; // nc = nbre de caractère
                  // nm = nbre de mot
                  for(nc=0;(c=getchar())!='\n';nc++){
                      if (c == ' ')
                          nm++;
                  }
              
              
                  printf("%d %d\n",nc, nm);
              
                  return 0;
              }
              
              
              

              0
              1. ok merci ça fonctionne mais peux-tu m''expliquer pourquoi ça ne fonctionne pas avec la boucle for??? Si bien sur il y a une explication...

                Encore merci pour tout
                0
                1. Salut,

                  voilà la code avec la boucle for...;
                  Bonne nuit...

                  #include <stdio.h>
                  
                  int main()
                  {
                      int c;
                      int nc = 0, nm = 0; // nc = nbre de caractère
                      // nm = nbre de mot
                      for (nc=0;(c=getchar())!='\n';nc++)
                  
                          if (c == ' ')
                              nm++;
                  
                  
                  
                      printf("%d %d\n",nc, nm);
                  
                      return 0;
                  }
                  
                  0
                  1. Contributeur
                    C'est le code que j'ai mis plus haut ;), et il y a aussi l'explication.
                    Bonne nuit
                    0