begin process at 2012 05 30 16:52:20
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

sasie d'un ligne


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

sasie d'un ligne

samedi 1 janvier 2005 à 19:11:30 | sasie d'un ligne

liliefr2000

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
dimanche 2 janvier 2005 à 06:50:35 | Re : sasie d'un ligne

Nashua

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.


Yves

dimanche 2 janvier 2005 à 12:24:19 | Re : sasie d'un ligne

plus_plus_fab

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.
lundi 3 janvier 2005 à 20:25:13 | Re : sasie d'un ligne

Nashua

<>++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.
**************************************************************************/
#include <stdio.h>
#include <termios.h>

struct termios Line_New_Setting,

	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;

if(tcgetattr(fd,&Line_Old_Setting) < 0) {
perror("Ioctl Get error");
return -1;
}
Line_New_Setting = Line_Old_Setting;

Line_New_Setting.c_lflag &= ~ICANON; /* non canonical mode */
Line_New_Setting.c_lflag &= ~ISIG; /* ignore ^C*/
Line_New_Setting.c_cc[VMIN] = 1; /* return after 1 char has been read */
Line_New_Setting.c_cc[VTIME] = 0; /* in .1 seconds */
Line_New_Setting.c_cc[VQUIT] = 0;
Line_New_Setting.c_lflag &= ~ECHO; /* disable echo */
Line_New_Setting.c_oflag |= (OPOST | ONLCR); /* enable Opost and nl to cr nl conversion */

/* set the new terminal attributes */
if(tcsetattr(fd,TCSAFLUSH,&Line_New_Setting) < 0){
perror("Ioctl Set error");
return -1;
}
return (0);
}


Yves

mardi 4 janvier 2005 à 01:03:17 | Re : sasie d'un ligne

plus_plus_fab

salut,

merci pour ton post, je n'avais jamais utilisé termios.h, c'est intéressant. Je vais étudier ça et  potasser le man ...

@+


mardi 4 janvier 2005 à 06:28:35 | Re : sasie d'un ligne

Nashua

Termios est fantastique pour qui aime "jouer" avec les tty's.
les ioctl () sont tout aussi charmant.


Yves



Cette discussion est classée dans : ligne, fonction, probleme, saisie, sasie


Répondre à ce message

Sujets en rapport avec ce message

Touches de fonctions [ par CHENRY ] En VC++6.0 avec les MFC, je souhaite employer les touches de fonction( F1 à F8) .Le but est:Dans un ecran de saisie, quand l'user est sur un champ de Petit probleme sous visual c++ [ par Hakim ] Salut,j'essaie a l'aide de visual c++ de traiter des valeurs saisie par un utilisateur mais voila mon probleme.Lorsque j'utilise une edit box tout mar Créer un masque de saisie en C [ par jimmi ] Bonjour, J'ai cherché partout mais en vainje développe un petit prog. en C qui fonctionne sur des lecteurs code barre.N'etant pas un grand Spécialiste probleme d'include [ par titus0m ] bonjour,je develop sous kdev sous linux.mon probleme est un conflit entre deux include qui possede une fonction qui se nomme pareil. C'est la fonction [?] Saisie d'une fonction [ par Cidrik ] Salut,Je débute en C et j'aimerais créer un programme qui réalise une étude de fonction (niveau 1°S) mais j'aimerais savoir comment faire pour que qua lecture de fichier [ par Machuet ] Hello, j'ai plusieurs question concernant la manipulation de fichier. En effet venant de VB, j'aimerais savoir si il existe des fonction pour lire un probleme de delcaration d'une fonction [ par naru ] slt, encore moi.j'ai une fonction qui renvoie pas de résultat que je déclare comme ça :void CMonProgDlg::Ausuivant()mais il me génère tout un tas d'er probleme avec la fonction GetAsyncKeyState() [ par aardman ] Bonjours,Je débute dans le c, et j'ai un petit probleme avec cette fonction.Je n'arrive pas a la faire fonctionner avec un int comme argument. Par exe aidez moi svp probleme avec include [ par gdarkblue ] Je suis un debutant . Je programme avec dev c++. Lorsque j'essaye d'inclure certains fichiers .h. Le compilateur trouve une erreur dans le fichier .he Probleme String -> double et long [ par lebalrog ] Salut tout le monde!J'ai un prob urgent a resoudre (tres urgent meme)!je fais :ficin >> ligne;long r=atol(ligne);double a=atof(ligne);avec ligne="0,12


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,123 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales