Getchar (langage C)

Résolu
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
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;
}
A voir également:

9 réponses

limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   140
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   140
 
Salut FIddy,

à quoi sert le char entre parenthèse...
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   140
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   140
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   140
 
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
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   140
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
C'est le code que j'ai mis plus haut ;), et il y a aussi l'explication.
Bonne nuit
0