begin process at 2012 05 30 14:56:56
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Base de données

 > 

Autre

 > 

Récuération chaine de caractère taille variable stdin


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

Récuération chaine de caractère taille variable stdin

jeudi 11 février 2010 à 20:00:56 | Récuération chaine de caractère taille variable stdin

omarino_007

Bonsoir,
Je cherche a enregistrer une chaine de caractère (en pratique c'est le résumé d'un livre pour un projet de gestion de bibliothèque), que j'écris par la suite dans un fichier .
Le problème c'est que ce résumé est à taille variable (selon ce que rentre l'utilisateur), et que je ne sais pas comment gérer la saisie au clavier de l'utilisateur puisque l'utilisateur doit être capable de faire des retours a la ligne alors que dans un terminal un retour à la ligne correspond a la fin de la saisie.
Merci à l'avance pour vos réponses et vos propositions
vendredi 12 février 2010 à 22:20:04 | Re : Récuération chaine de caractère taille variable stdin

CptPingu

Administrateur CodeS-SourceS
C ou C++ ?
Vu le forum, je pense que tu le veux en C.

Il te suffit d'utiliser autre chose que scanf.
Tu as getchar, qui récupère un et un seul caractère:
Code C/C++ :
#include <stdio.h>
#define MAX 32

int main (void)
{
  char chaine[MAX + 1] = {0};
    char c;
    int i = 0;

    printf("Tapez une phrase : \n");
    while ((c = getchar()) && i < MAX && c != 'X')
    {
      chaine[i] = c;
      ++i;
    }
    printf("Vous avez tape : '%s'\n", chaine);

    return 0;
}


Ce code ignore les sauts de ligne, et ne s'arrête que si le nombre de caractères entrée excède MAX (qui vaut 32), ou si tu place un X (qui ne sera pas pris en compte).
Ce n'est qu'un exemple, à toi de l'améliorer.

_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
vendredi 12 février 2010 à 23:17:26 | Re : Récuération chaine de caractère taille variable stdin

omarino_007

Bonjour, tout d'abord merci pour la réponse.
Au fait, c'est en C.
Le problème est dans la limite.
Dans mon cahier de charge ma chaine de caractere (resumé) n'a pas de taille prédéfinie (variable), donc pas de "MAX".
Le problème c'est que dès que l'utilisateur appuie sur ENTREE la chaine de caractère est automatiquement validée :s
j'ai réussi à faire une fonction qui lit dynamiquement une chaine de caractère de l'entrée standard (avec realloc ...) mais celle là lit infiniment :s .
Je pense que je vais laisser tomber ca, j'ai fais des tests, mon noyau marche bien, c'est l'essentiel. Je vais passer par une interface graphique (ncurses ou WIN API)
J'aimerai quand même savoir, dans le cas où quelqu'un saurait, comment on pourrai faire ça.
J'ai pensé a utiliser un hook pour intercepter les touches au clavier (demander à l'utilisateur de rentrer un racourci au clavier à la fin de sa chaine).
vendredi 12 février 2010 à 23:25:39 | Re : Récuération chaine de caractère taille variable stdin

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Pas besoin d'aller aussi loin que le hook clavier.
Au lieu d'utiliser un champ max, tu utilises simplement une chaîne dynamique, sans champs MAX. Tu définis le caractère de fin à EOF (CTRL + D une ou deux fois pour l'utilisateur):
Code C/C++ :
#include <stdio.h>
#include <stdlib.h>

int main (void)
{
  char* chaine = 0;
  char c;
  int i = 0;

  printf("Tapez une phrase : \n");
  while ((c = getchar()) && c != EOF)
  {
    ++i;
    chaine = realloc(chaine, (i + 1) * sizeof (char));
    chaine[i - 1] = c;
    chaine[i] = 0;
  }
  printf("Vous avez tape : '%s'\n", chaine);
  free(chaine);

  return 0;
}


_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
vendredi 12 février 2010 à 23:54:23 | Re : Récuération chaine de caractère taille variable stdin

omarino_007

Merci beaucoup ça marche... eh bein ... je commencer à désespérer voire à laisser tomber. Merci encore
samedi 13 mars 2010 à 15:32:09 | Re : Récuération chaine de caractère taille variable stdin

FlorimondH

C'est pas un peu lourd un realloc à chaque caractère? moi j'utiliserais une chaine de buffer intermédiaire...


Cette discussion est classée dans : taille, variable, caractère, chaine, utilisateur


Répondre à ce message

Sujets en rapport avec ce message

[C/C++]Taille chaine caractère [ par goutbouyo ] Salut,Je n'arrive pas à définir la taille de ma chaine de caractère à l'aide d'une variable (nb).CHAR CHAINE[NB];En fait il faut que je limite la tail Petit programme de chaine de caractère [ par trystan007 ] J'ai un petit problème : l'utilisateur doit taper une chaine de caractère en mode console, puis, la chaine est envoyée en même tps qu'une 15aine de va Insérer la valeur d'une variable dans une chaine de caractère [ par Zakata ] Bonjour,(Je suis débutant en C++)Est il posible d'insérer la valeur d'une variable (int, bool, float...) dans une chaine de caractère (string) ?du gen Longueur chaine de caractère en C/C++ [ par Folcoche ] Bonjours,Je dois réaliser le jeu du pendu en Console windows, a partir du logiciel Dev C++.Je bute sur une soucis de longueur de chaine de caractère.V Position d'un caractère. [ par fireuo ] J'ai fait un programme en VB qui servait a essayer toute les combinaison d'un checksum. Je vous évite les détails. Mais dans la code VB j'ai la ligne chaine de caractère en paramètre... [ par Icebibi ] bonjour à tous. je sais pas si le titre du topic est vraiment bien adapté, vous allez binen voir. en fait mon problème c'est que je tente de faire un integrer caractère grec sigma (écart type) dans une chaine à afficher [ par jhmallot ] Bonjour je souhaite afficher sur un graphique la chaine? = 1.2 En arial le code existe mais si je créé la chaine sigma[]={0x03c3,0x0000};je récupère l Afficher caractère d'une chaine [ par acidjackproject ] Bonjour, je cherche à afficher seulement quelque caractère d'une string. Exemple: Mathématique, j'aimerai juste afficher Math. Merci d'avance Ju Découpe une chaine de caractère suivant un séparateur donné [ par ousin ] Bonjour, exite-t-il en langage une fonction permetant de decouper une chaine de caractère suivant un séparateur donné(";" par exemple) et range les po [débutant]recevoir et envoyer une chaine de caractère sur un port série en C? [ par makan94 ] bonjours à tous,sa fait déjas plusieur semaine que je recherche désespérément une solution a ma question sans avoir trouvé de réponse: Comment recevoi


Nos sponsors


Sondage...

Comparez les prix

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,170 sec (3)

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