Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1685 connectés 

  FORUM HardWare.fr
  Programmation
  C

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1978355
lassault1
Posté le 29-03-2010 à 12:31:40  profilanswer
 

Bonjours a 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. char voy[6] = {'a','e','i','o','u','y'}, c;
  4. int compte[6] = {0}, i;
  5. printf("Donnez un texte de votre choix :\n" );
  6. do
  7.   { scanf("%c", &c);
  8.     for(i = 0; i < 6; i++)
  9.      if(c == voy[i])
  10.       compte[i] = compte[i] + 1;
  11.   } while(c != '\n');
  12.   printf("Votre texte comporte :\n" );
  13.   for(i = 0; i < 6; i++)
  14.   printf("%d fois la lettre %c\n", compte[i], voy[i]);
  15.   return 0;
  16. }

mood
Publicité
Posté le 29-03-2010 à 12:31:40  profilanswer
 

n°1978369
Dolphin Di​ce
Posté le 29-03-2010 à 13:01:01  profilanswer
 

Citation :

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


Il y a un \n parce que l'appuie sur la touche "entrée" vaut ce symbole.

Citation :

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)


En utilisant la tactique de mettre le symbole %c au lieu d'une chaine de caractère c'est que le texte n'a pas besoin d'être délimité, car si j'écris par exemple voyelle, le v sera pris en compte au premier passage de la boucle, puis (et c'est là l'intérêt de mettre le scanf dans la boucle) le o sera récupéré automatiquement grâce au buffer, et ainsi de suite jusqu'au \n. Alors qu'avec une chaine on aurait dû délimiter le mot, ce qui est dommage si la personne s'appelle Schwarzenegger  :lol: . Le buffer c'est une chaine de caractère virtuelle si tu veux, vu qu'on demande un seul caractère, le reste de la chaine est stockée dans cette variable (qui est virtuelle attention, donc pas appelable) quand on fait un appelle à scanf par exemple, la fonction regarde s'il y a quelque chose dans le buffer et si c'est le cas, un caractère ou une chaine est récupéré. Le seul désavantage, c'est qu'il faut bien vider le buffer avant de passer à la suite du programme pour ne pas récupérer des fausses données qui seraient restées dans le buffer, mais une petite fonction peut faire ce travail :p

Citation :

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


L'intérêt du do...while, c'est que la boucle se fait au moins au fois même si la condition est fausse dès le départ, ce qui n'est pas nécessaire ici, donc un while direct est possible.

Message cité 1 fois
Message édité par Dolphin Dice le 29-03-2010 à 13:01:51

---------------
Apprenez à créer des jeux d'aventure avec AGS
n°1978371
rufo
Pas me confondre avec Lycos!
Posté le 29-03-2010 à 13:09:39  profilanswer
 

Ce genre d'énoncé fait penser à un devoir : ici, on ne les fait pas :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1978376
lassault1
Posté le 29-03-2010 à 13:32:23  profilanswer
 

Merci Dolphin Dice c'est plus claire..
 
Mais c'est quoi "le buffer"?
 
Et si on utilise une chaine de caractère d'une taille [1000] c'est suffisant pour taper une petite phrase donc c'est possible d'utiliser %s ?

n°1978378
breizhbugs
Posté le 29-03-2010 à 13:37:38  profilanswer
 

lassault1 a écrit :


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?


Tout simplement parce que le programme effectue le comptage au fur et a mesure que l'utilisateur tape au clavier! (et donc caractère par caractères)
Si le programme effectuait le comptage après la saisie on aurait utiliser scanf avec %s et alors on aurait parcouru la chaine caractere par caractere jusqu'a '\0'

n°1978596
Trap D
Posté le 29-03-2010 à 18:24:54  profilanswer
 

Dolphin Dice a écrit :

L'intérêt du do...while, c'est que la boucle se fait au moins au fois même si la condition est fausse dès le départ, ce qui n'est pas nécessaire ici, donc un while direct est possible.

Non, le do while est obligatoire à moins que c ne soit initialisé à 0, on ne sait jamais.

n°1978642
lassault1
Posté le 29-03-2010 à 20:24:30  profilanswer
 

Citation :

Non, le do while est obligatoire à moins que c ne soit initialisé à 0, on ne sait jamais.


 
Pourquoi le do..while est obligatoire dans ce code car je suis plutôt de l'avis de Dolphin Dice ?

Message cité 1 fois
Message édité par lassault1 le 29-03-2010 à 20:25:13
n°1978686
Trap D
Posté le 29-03-2010 à 22:32:46  profilanswer
 

Parce que si par malheur c, qui n'est pas initialisé dans ton code, vaut '\n' alors tu n'entres jamais dans la boucle.  
Peu de chance que ça arrive, mais on ne sait jamais, et ce sera justement le jour où tu montreras le code à ton prof que ça arrivera !

n°1978688
breizhbugs
Posté le 29-03-2010 à 22:38:43  profilanswer
 

lassault1 a écrit :

Citation :

Non, le do while est obligatoire à moins que c ne soit initialisé à 0, on ne sait jamais.


 
Pourquoi le do..while est obligatoire dans ce code car je suis plutôt de l'avis de Dolphin Dice ?


 
L'interet du do..while est surtout le fait que l'on doit passer au moins une fois dans la boucle, c'est a dire que l'on demande a l'utilisateur au moins une saisie et le do..while reflète ca de manière simple.
 
Si l'on souhaite utiliser un while, il faut faire une saisie avant la boucle et une a la fin de la boucle, ce qui est un peu moins élégant:

Code :
  1. scanf("%c", &c);
  2. while(c != '\n')
  3. {
  4.       for(i = 0; i < 6; i++)
  5.       {
  6.           if(c == voy[i])
  7.               compte[i] = compte[i] + 1;
  8.       }
  9.       scanf("%c", &c);
  10. }


Message édité par breizhbugs le 29-03-2010 à 22:40:07
n°1978704
lassault1
Posté le 30-03-2010 à 01:00:17  profilanswer
 

Trap D a écrit :

Parce que si par malheur c, qui n'est pas initialisé dans ton code, vaut '\n' alors tu n'entres jamais dans la boucle.  
Peu de chance que ça arrive, mais on ne sait jamais, et ce sera justement le jour où tu montreras le code à ton prof que ça arrivera !


 
Oui mais même si 'c' n'est pas initialisé et qui vaut '\n' alors il y aura qu'une seule boucle donc le tableau ne sera pas trier...

mood
Publicité
Posté le 30-03-2010 à 01:00:17  profilanswer
 

n°1978712
Trap D
Posté le 30-03-2010 à 07:15:04  profilanswer
 

lassault1 a écrit :


 
Oui mais même si 'c' n'est pas initialisé et qui vaut '\n' alors il y aura qu'une seule boucle donc le tableau ne sera pas trier...

Pas avec un while, avec un do / while oui.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

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

 

Sujets relatifs
[GMF] Editeur graphique pour une modélisation sur plusieurs niveaux(Résolu) Elements invisibles dans le html suite à un include
Questions sur les tableauxsynchroniser plusieurs bases de donnees
[VBA] macro excel pour envoyer plusieurs fichiersErreur après copie de plusieurs feuilles --> pb presse papier?
Regrouper plusieurs registres en un seulRecaler du texte de plusieurs lignes contre une image
Colorbox - plusieurs thèmes en une page 
Plus de sujets relatifs à : Comptage des voyelles d'une suite de caracteres, plusieurs questions..


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR