Getchar (langage C)

Résolu/Fermé
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 - 7 juil. 2008 à 21:33
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 7 juil. 2008 à 23:57
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;
}

9 réponses

limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
7 juil. 2008 à 21:57
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 816
7 juil. 2008 à 21:52
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 dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
7 juil. 2008 à 21:59
Salut FIddy,

à quoi sert le char entre parenthèse...
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 816
7 juil. 2008 à 22:00
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 dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
7 juil. 2008 à 22:08
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 816
7 juil. 2008 à 22:12
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 dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
7 juil. 2008 à 22:27
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 816
7 juil. 2008 à 23:06
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 dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
7 juil. 2008 à 23:16
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 dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
7 juil. 2008 à 23:35
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 816
7 juil. 2008 à 23:57
C'est le code que j'ai mis plus haut ;), et il y a aussi l'explication.
Bonne nuit
0