Bien programmer en langage C
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment : -28%
Brandt LVE127J – Lave-vaisselle encastrable 12 ...
Voir le deal
279.99 €

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

2 participants

Aller en bas

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

Message  lassault1 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

Revenir en haut Aller en bas

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

Message  -ed- 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.
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser