Comptage des voyelles d'une suite de caracteres, plusieurs questions..

Voir le sujet précédent Voir le sujet suivant Aller en bas

Comptage des voyelles d'une suite de caracteres, plusieurs questions..

Message  lassault1 le Lun 29 Mar 2010 - 14:04

Bonjour à tous

Voila plusieurs questions a propos de ce code :

1/ Pourquoi il est écrit while(c != '\n') au lieu de while(c != '\0') car ce dernier correspond a la fin de la chaine de caractère, mais '\n' ? o_O


2/ Pourquoi dans le scanf il est écrit "%c" qui correspond a un caractère au lieu de "%s" qui correspond a une chaine de caractère, car dans ce code on rentre une phrase et non une lettre?


3/ Pourquoi le scanf fait parti de la boucle alors que le texte est demandé a être taper qu'une seul fois? (dans ce code, normalement a chaque boucle je dois taper le texte car scanf est dans la boucle)


4/ Et enfin peut on utiliser la boucle while au lieu de Do.. while ? si non, pourquoi?

Merci a vous d'avance :)

Voici le code :

Code:

  1. int main(int argc, char *argv[])
  2. {
  3.
  4. char voy[6] = {'a','e','i','o','u','y'}, c;
  5. int compte[6] = {0}, i;
  6.
  7. printf("Donnez un texte de votre choix :\n" );
  8.
  9. do
  10.  { scanf("%c", &c);
  11.    for(i = 0; i < 6; i++)
  12.      if(c == voy[i])
  13.      compte[i] = compte[i] + 1;
  14.  } while(c != '\n');
  15.
  16.  printf("Votre texte comporte :\n" );
  17.  for(i = 0; i < 6; i++)
  18.  printf("%d fois la lettre %c\n", compte[i], voy[i]);
  19.
  20.
  21.  return 0;
  22. }

lassault1

Messages : 2
Date d'inscription : 29/03/2010

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Comptage des voyelles d'une suite de caracteres, plusieurs questions..

Message  -ed- le Lun 14 Fév 2011 - 16:32

lassault1 a écrit:
1/ Pourquoi il est écrit while(c != '\n') au lieu de while(c != '\0') car ce dernier correspond a la fin de la chaine de caractère, mais '\n' ? o_O
Ici, il n'y a pas de chaine de caractères, mais une simple séquence de caractères extraits un à un du flux entrant (stdin). Le caractère '\n' indique la fin de la saisie. Si on stocke les caractères reçus au fur et à mesure dans un tableau, c'est quand on rencontre ce '\n' que l'on 'ferme' la chaine en plaçant alors un 0 au lieu de ce '\n'.

2/ Pourquoi dans le scanf il est écrit "%c" qui correspond a un caractère au lieu de "%s" qui correspond a une chaine de caractère, car dans ce code on rentre une phrase et non une lettre?
Parce que c'est une manière de faire une saisie contrôlée caractère par caractères (j'aurais utilisé getchar(), mais bon ...). scanf() avec "%s" s'arrête au premier 'blank', (espace, TAB etc.), ce qui interdit la saisie d'une phrase (mots séparés par un espace).

3/ Pourquoi le scanf fait parti de la boucle alors que le texte est demandé a être taper qu'une seul fois? (dans ce code, normalement a chaque boucle je dois taper le texte car scanf est dans la boucle)
Parce qu'avec "%c" (ou getchar()), l'extraction se fait un caractère par caractère. Si on a saisi 10 caractères, il faut 11 tours de boucle ( 10 caractères + le '\n')
4/ Et enfin peut on utiliser la boucle while au lieu de Do.. while ? si non, pourquoi?
Etant donné que la valeur de c est définie dans la boucle, non. (Ou alors il faudrait initialiser c avant la boucle, à une valeur qui fait entrer dans la boucle... Inutilement complexe. do-while convient ici.

_________________
C is a sharp tool !

-ed-
Admin
Admin

Messages : 289
Date d'inscription : 26/05/2008
Age : 60
Localisation : Paris 6eme arrondissement (75, France)

Voir le profil de l'utilisateur http://bien-programmer.fr

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum