Comptage des voyelles d'une suite de caracteres, plusieurs questions.. - C - Programmation
Marsh Posté le 29-03-2010 à 13:01:01
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? |
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 . 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
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.
Marsh Posté le 29-03-2010 à 13:09:39
Ce genre d'énoncé fait penser à un devoir : ici, on ne les fait pas
Marsh Posté le 29-03-2010 à 13:32:23
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 ?
Marsh Posté le 29-03-2010 à 13:37:38
lassault1 a écrit : |
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'
Marsh Posté le 29-03-2010 à 18:24:54
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.
Marsh Posté le 29-03-2010 à 20:24:30
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 ?
Marsh Posté le 29-03-2010 à 22:32:46
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 !
Marsh Posté le 29-03-2010 à 22:38:43
lassault1 a écrit :
|
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 :
|
Marsh Posté le 30-03-2010 à 01:00:17
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. |
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...
Marsh Posté le 30-03-2010 à 07:15:04
lassault1 a écrit : |
Pas avec un while, avec un do / while oui.
Marsh Posté le 29-03-2010 à 12:31:40
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 :