liliefr2000
Messages postés2Date d'inscriptionmardi 5 octobre 2004StatutMembreDernière intervention23 avril 2005
-
1 janv. 2005 à 19:11
cs_Nashua
Messages postés48Date d'inscriptionlundi 29 novembre 2004StatutMembreDernière intervention16 mars 2005
-
4 janv. 2005 à 06:28
bonjour!
jai un probleme lorsque je veux faire une fonction pour saisir une ligne en C!
ma fonction saisir_ligne doi appele une fonction qui saisie un mot (par un scanf) jusqu'a ce qu'on atteigne le caractere de fin de ligne!
mais je ne comprend pas comment on peu rentrer tt les mots a la suite espacé avec des ' ' comme si on tapait une vrai ligne sans avoir besoin de taper entrer a chaque fois qu'on saisie un mot pour pouvoir valider la saisie!et je voudrai aussi massurer que le caractere de fin de ligne correspond bien a taper entrer!
j'espere que ma description de mon probleme n'est pas trop incomprehensible.
merci d'avance
cs_Nashua
Messages postés48Date d'inscriptionlundi 29 novembre 2004StatutMembreDernière intervention16 mars 2005 2 janv. 2005 à 06:50
en premier lieu il faut utiliser une fonction telle que getc(), getchar(), ou gets() au lieu de scanf().
gets() recopie les caracteres saisis dans un buffer jusqu'a ce que gets lise un \n ou \r. ( enter ou retour chariot)
getchar(dos) ou getc (unix) retournent le caractere saisi et il faut alors analyser ce caractere pour detecter une fin de ligne (\n). Dans le cas d'unix il faudra configurer le tty pour etre non bloquant.
Dans le cas de windows je pense qu'il existe une fonction non bloquante ( getch????)
Dans tous ces cas attention au debordements de buffer.
plus_plus_fab
Messages postés232Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 8 janvier 2005 2 janv. 2005 à 12:24
getchar() = getc(stdin) ,
et utiliser fgets à la place de l'infame gets pour pallier aux débordements de tampon.
Nashua> comment rendre une terminal non bloquant ? pour une console virtuelle ou un émulateur de terminal xterm éventuellement ?
liliefr2000> Une solution serait de lire une ligne avec fgets, puis en dans un second temps analyser le tampon pour en extraire les mots.
cs_Nashua
Messages postés48Date d'inscriptionlundi 29 novembre 2004StatutMembreDernière intervention16 mars 2005 3 janv. 2005 à 20:25
<>++fab > desole pour de contre temps, j'ai du me construire un linux vite fait.
Ci -dessous une fonction qui passe la ligne en mode "raw" . juste pour
ne pas rester bloque en attente apres avoir recu 1 caractere. VTIME et
VMIN sont expliques dans le man de termios. Dans mon code on
attend VMIN = 1 caractere et l'on retourne immediatement. il n'y
a pas de timeout VTIME.
Line_Old_Setting;
/***************** un exemple d'utilisation de la fonction ********/
int main(){
int c;
setRawAttr(fileno(stdin));
while(1)
c = fgetc(stdin);
}
/*****************************************************/
int setRawAttr(int fd){
extern struct termios Line_New_Setting,
Line_Old_Setting;