GNT sans publicité, site mobile, fonctionnalitées exclusives...

comprendre getchar()

Le
bpascal123
Je trouve getchar() assez difficile à comprendre. Au lieu de saisir du
clavier, getchar lit directement dans la mémoire? Presser une touche
du claver entraine un signal dans le bios qui "renvoie" ce signal dans
le kernel puis dans la mémoire (buffer) et de ce dernier est affiché
le caractère de la touche pressée (par ex.: a) précédemment. Par
contre le caractère reste toujours dans le buffer mais dans la partie
"ancienne" du buffer. Dans la partie "neuve", se trouverait les
caractères qui n'ont pas été affichés à l'écran ou traités d'=
une autre
manière.

Ce code d'apparence simple pour la saisie me laisse perplexe:

#include <stdio.h>

int main(void)
{
char c ;
c = getchar() ;

while ( c != EOF )
{
putchar(c) ;
c = getchar() ;
}
return 0 ;
}

Je me demande si un petit apprentissage de l'assembleur jusqu'à
comprendre ce code, ne serait pas utile dans ce cas?
Lire les 59 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 12
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Vivien Moreau
Le #22274071
On 2010-06-19, wrote:

#include
int main(void)
{
char c ;
c = getchar() ;

while ( c != EOF )
{
putchar(c) ;
c = getchar() ;
}
return 0 ;
}



Attention, contrairement à ce que l'on pourrait penser,
getchar() renvoit un entier; voir son prototype :
int getchar(void);

C'est simplement parce que EOF a une valeur qui par
définition ne peut être de type char.

--
Vivien Moreau
Benoit Izac
Le #22274111
Bonjour,

le 19/06/2010 à 02:14, bpascal a écrit dans le message

Je trouve getchar() assez difficile à comprendre. Au lieu de saisir du
clavier, getchar lit directement dans la mémoire? Presser une touche
du claver entraine un signal dans le bios qui "renvoie" ce signal dans
le kernel puis dans la mémoire (buffer) et de ce dernier est affiché
le caractère de la touche pressée (par ex.: a) précédemment. Par
contre le caractère reste toujours dans le buffer mais dans la partie
"ancienne" du buffer. Dans la partie "neuve", se trouverait les
caractères qui n'ont pas été affichés à l'écran ou traités d'une autre
manière.

Ce code d'apparence simple pour la saisie me laisse perplexe:

#include
int main(void)
{
char c ;



Attention, getchar() renvoie un int !

c = getchar() ;

while ( c != EOF )
{
putchar(c) ;
c = getchar() ;
}
return 0 ;
}

Je me demande si un petit apprentissage de l'assembleur jusqu'à
comprendre ce code, ne serait pas utile dans ce cas?



Non, tu te poses vraiment trop de questions, il n'y a aucune histoire de
buffer ici. Tu lis un caractère dans stdin, puis tant que ce caractère
n'est pas EOF (fin de fichier), tu l'envoies sur stdout puis tu en lis
un autre, etc. Il n'y a pas à aller chercher plus loin.

--
Benoit Izac
xtof pernod
Le #22274131
Le 19/06/2010 09:37, Benoit Izac a %écrire :
le 19/06/2010 à 02:14, bpascal a écrit dans le message
(...)
Ce code d'apparence simple pour la saisie me laisse perplexe:

#include
int main(void)
{
char c ;



Attention, getchar() renvoie un int !




Ultra-classique, comme 'bug' / piège / etc..
Si tu es tombé dessus, c'est un signe que tu es sur La Voie ;)

{...}

Je me demande si un petit apprentissage de l'assembleur jusqu'à
comprendre ce code, ne serait pas utile dans ce cas?



Non, tu te poses vraiment trop de questions, il n'y a aucune histoire de



nb_Non++;

buffer ici. Tu lis un caractère dans stdin, puis tant que ce caractère


^^^^^^ ^^^^^
sisi, c'est le but de stdio d'ailleurs.

n'est pas EOF (fin de fichier), tu l'envoies sur stdout puis tu en lis
un autre, etc. Il n'y a pas à aller chercher plus loin.



Peut-être dans une bonne doc', genre le K&R ? au chapitre quivabien(c;)

>> c = getchar() ;



--
christophe.
Samuel DEVULDER
Le #22274261
a écrit :
Je trouve getchar() assez difficile à comprendre.



Non c'est tout con: il te retourne le dernier caractère lu au clavier ou
EOF. C'est tout. Après on on se fiche de savoir comment ca marche en
dessous pour pouvoir l'utiliser.

Ce code d'apparence simple pour la saisie me laisse perplexe:



Pourquoi? A part le pb de type du retour de getchar(), ce code est tout
bête. Aucune astuce rien. C'est du tout simple, qu'on trouve dans tous
les langages e programmation, sur toutes les machines.

Je me demande si un petit apprentissage de l'assembleur jusqu'à
comprendre ce code, ne serait pas utile dans ce cas?



L'assembleur n'a rien à voir avec ce que fait ce code. Tu ne comprendras
pas mieux ce code en assembleur qu'en C ou en Pascal.

Tu te poses trop de questions, ca te dispersse et ca nuit à ta progression.

sam.
Benoit Izac
Le #22274251
Bonjour,

le 19/06/2010 à 09:57, xtof pernod a écrit dans le message

[ c = getchar(); ]

Je me demande si un petit apprentissage de l'assembleur jusqu'à
comprendre ce code, ne serait pas utile dans ce cas?



Non, tu te poses vraiment trop de questions, il n'y a aucune histoire de



nb_Non++;

buffer ici. Tu lis un caractère dans stdin, puis tant que ce caractère


^^^^^^ ^^^^^
sisi, c'est le but de stdio d'ailleurs.



Maintenant que tu as commencé, il va falloir que tu développes ta pensée
jusqu'au bout car je ne vois où tu veux en venir.

--
Benoit Izac
Publicité
Suivre les réponses
Poster une réponse
Anonyme