[c] je ne comprend rien !
Maxg59
Messages postés
275
Date d'inscription
Statut
Membre
Dernière intervention
-
Maxg59 Messages postés 275 Date d'inscription Statut Membre Dernière intervention -
Maxg59 Messages postés 275 Date d'inscription Statut Membre Dernière intervention -
Salut a tous !!!
allors voila je (re)débute en C, j'aivais posé une question sur ce forum il y a quelque tem, on m'avais donné une reponse mais comme je ne comprenais pas je me suis dit que le c etait un langage trop compliqué pour moi, la je m'y suis remi et je ne comprend toujours ps la réponse.
Pourriez-vous svp me traduire, en français le code suivant ???
je ne voi pas du tout ou il est question de changer le texte en entré ????
Au fait, le code sert a copier son entrée sur sa sortien en remplacent les chane d'espace par un seul espace.
D'avance Merci !!!
Max
allors voila je (re)débute en C, j'aivais posé une question sur ce forum il y a quelque tem, on m'avais donné une reponse mais comme je ne comprenais pas je me suis dit que le c etait un langage trop compliqué pour moi, la je m'y suis remi et je ne comprend toujours ps la réponse.
Pourriez-vous svp me traduire, en français le code suivant ???
#include<stdio.h> #include <stdlib.h> main() { int c,espace; espace = 0; while((c=getchar())!=EOF) { if (c != ' ') espace = 0; if (c == ' ') espace++; if (espace < 2) putchar(c); } }
je ne voi pas du tout ou il est question de changer le texte en entré ????
Au fait, le code sert a copier son entrée sur sa sortien en remplacent les chane d'espace par un seul espace.
D'avance Merci !!!
Max
Je crois avoir compris.
Alors, voilà dis toi que la variable c est un entier.
Un caractère prend habituellement la place d'un octet.
Un octet c'est la taille d'une variable char. Une variable int possède le double je crois (avec gcc). Mais qu'un int possède plus de place ne change rien: il ne peux contenir qu'un caractère et non pas une chaîne de caractère.
Si tu veux stocker une chaine de caractère, il faut utiliser un tableau et non pas une simple variable. (Et changer le code).
getchar ne retourne qu'un seul caractère.
Alors imagine:
Tu tapes trois caractères, tant que pas arrivé à la fin de ce que tu as tapé (!=EOF), la boucle continuera.
Premier passage de la boucle: getchar récupère le premier espace
, avec la condition d'en dessous, il s'incrémente de 1.
Avec la condition du dessous, on voit qu'il est plus petit que 2 donc affichage de l'espace.
Second passage de la boucle:getchar récupère le deuxième espace, avec la condition d'en dessous, il s'incrémente de 1, donc espace est égal à 2, donc pas d'affichage avec la condition d'après. Et ainsi de suite: tant que getchar ne donnera pas autre chose qu'un espace à c, alors espace sera superieur à 2, donc pas d'affichage.
Le soucis c'est peut être que tu avais cru que getchar retournait une chaine, et non pas un seul caractère. Ca change tout.
Donc ici, si c est égal à autre chose qu'un espace, il ya aura affichage sans encombre, mais s'il y a un espace, il incrémentera la variable espace.
Il faut bien se dire que tu ecris ta ligne, tu appuies sur entrée, et getchar ne récupèrera qu'un seul caractère à la fois jusqu'à ce qu'il atteigne la fin. Donc il ya aura une itération de la boucle à chaque fois qu'un caractère est récupéré.