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?
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?

Poser une question


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
le 19/06/2010 à 02:14, bpascal a écrit dans le message
Attention, getchar() renvoie un int !
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
Ultra-classique, comme 'bug' / piège / etc..
Si tu es tombé dessus, c'est un signe que tu es sur La Voie ;)
nb_Non++;
^^^^^^ ^^^^^
sisi, c'est le but de stdio d'ailleurs.
Peut-être dans une bonne doc', genre le K&R ? au chapitre quivabien(c;)
--
christophe.
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.
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.
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.
le 19/06/2010 à 09:57, xtof pernod a écrit dans le message
[ c = getchar(); ]
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