Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1126 connectés 

  FORUM HardWare.fr
  Programmation
  C

  lecture d'une chaine de caractère

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

lecture d'une chaine de caractère

n°1518789
Amonchakai
Posté le 23-02-2007 à 11:42:09  profilanswer
 

Bonjour,
 
    J'ai un petit problème avec la lecture de chaine de caractère. Je vousdrais lire une entrée clavier, bein sûr sans utiliser scanf... Donc rien de plus facile : je fais un while avec un fgetc(). mais le problème c'est que je ne veux pas que l'utilisateur rentre trop de caractères. Donc je pensais tout bêtement rajouter une condition, sur le nombre de caractères... mais le truc c'est que fgetc() est buffeurisé donc pas moyen de compter les caractères... Ce que je voudrais c'est arrêter la saisie après le dépassement de capacité de mon premier tableau...

Code :
  1. #include<stdio.h>
  2. int main(int argc, char **argv)
  3. {
  4.     int i = 0;
  5.     char c, tab[11], tab2[11];
  6.     printf("Donnez la première chaine : " );
  7.     while((c = fgetc(stdin)) != EOF && (i < 10))
  8.     {
  9.         tab[i] = c;
  10.         i++;
  11.     }
  12.     tab[i] = '\0';
  13.     i = 0;
  14.     printf("Donnez la 2e chaine : " );
  15.     while((c = fgetc(stdin)) != EOF && (i < 10))
  16.     {
  17.         tab2[i] = c;
  18.         i++;
  19.     }
  20.     tab2[i] = '\0';
  21.     return 0;
  22. }


car là si la personne maintient un bouton enffoncé... et bien j'ai les 10 premier caractères dans le premier tableau et les 10 suivants dans le deuxième...
Est ce que vous saurriez comment faire pour arrêter la saisie et afficher le deuxième message ?
 
Merci :)

mood
Publicité
Posté le 23-02-2007 à 11:42:09  profilanswer
 

n°1518791
Amonchakai
Posté le 23-02-2007 à 11:44:19  profilanswer
 

En fait ce que je me dit c'est qu'au final il faudrais pouvoir vider le buffer....

n°1518793
Taz
bisounours-codeur
Posté le 23-02-2007 à 11:46:36  profilanswer
 

c doit être de type int.
 
si fgets(chaine) != EOF
  si la chaine ne se termine pas par un '\n'
    alors while (c = fgetc != EOF and c != '\n')
       ne rien faire
 

n°1518796
Amonchakai
Posté le 23-02-2007 à 11:49:26  profilanswer
 

ok, merci Taz
sinon, j'ai trouvé : il faut faire un fflush(stdin); après la remière saisie... je sais pas si c'est propre mais ça a l'air de marcher...

n°1518801
Taz
bisounours-codeur
Posté le 23-02-2007 à 11:59:48  profilanswer
 

NON NON NON PUTAIN !

n°1518830
jesus_chri​st
votre nouveau dieu
Posté le 23-02-2007 à 12:40:08  profilanswer
 

Taz a écrit :

NON NON NON PUTAIN !


+1 sur le fond (pas sur la forme :D)
fflush( <flux d'entrée> ) c'est pas portable. Ca marche assez souvent mais c'est dégeux.

n°1518854
Amonchakai
Posté le 23-02-2007 à 13:26:59  profilanswer
 

Ok, promis je le referai pas :D
 
Donc, sauf erreur de ma part le code de Taz donne :

Code :
  1. if(fgets(tab, 10, stdin) != EOF)
  2.     if(tab[strlen(tab)-1] != '\n')
  3.         while((c = fgetc(stdin)) != EOF && c != '\n') {};


 
ce qui marche... mais j'avoue ne pas bien comprendre : le fgets() va lire les 10 caractères max que l'utilisateur va taper et les mettre dans le tableau puis le reste dans un buffer. On regarde si la saisie c'est terminée par un entrée, si c'est le cas on parcout tous les caractères du buffer... et j'imagine que c'est pour vider le reste du buffer c'est ça ?


Message édité par Amonchakai le 23-02-2007 à 13:30:05
n°1518917
Taz
bisounours-codeur
Posté le 23-02-2007 à 14:37:22  profilanswer
 

On ne vide pas le buffer. On continue la lecture jusqu'à la fin de ligne, pour la consommer. stdin c'est un fichier, avec ces fgetc, on fait juste en sorte d'avancer un peu jusqu'à trouver le début de prochaine ligne.

n°1519038
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-02-2007 à 16:55:17  profilanswer
 

Amonchakai a écrit :

ok, merci Taz
sinon, j'ai trouvé : il faut faire un fflush(stdin);


:vomi: Merci, faut encore que je change de clavier...

 

http://mapage.noos.fr/emdel/notes.htm#fgetc
http://mapage.noos.fr/emdel/inputs.htm

 

Message cité 1 fois
Message édité par Emmanuel Delahaye le 23-02-2007 à 16:56:22

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1519072
Amonchakai
Posté le 23-02-2007 à 17:58:23  profilanswer
 

Taz a écrit :

On ne vide pas le buffer. On continue la lecture jusqu'à la fin de ligne, pour la consommer. stdin c'est un fichier, avec ces fgetc, on fait juste en sorte d'avancer un peu jusqu'à trouver le début de prochaine ligne.


Ok, merci j'ai compris  


J'avais déja regardé... mais sûrement lut trop vite car j'avais pas trouvé ma réponse... Donc je vais regarder à nouveau.
 
Merci à vous
 
ps : promis je vous ressortirai plus jamais cette horreur :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  lecture d'une chaine de caractère

 

Sujets relatifs
Caractère à probleme... [Vbasic.Net]lecture du port serie dans test bench vhdl
Chainechaine de carractere
Extraction de mots d'une chaînelecture fichier texte avec vb
[résolu]Problème avec ExecuteExcel4Macro....Lire une chaine
Problème caractère "?" à la place des "é"Problème de lecture chaine caractère
Plus de sujets relatifs à : lecture d'une chaine de caractère


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR