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

  FORUM HardWare.fr
  Programmation
  C

  [C] Problèmes avec les chaines de caractères

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Problèmes avec les chaines de caractères

n°1590932
Sinner
Trapped Inside This Octavarium
Posté le 24-07-2007 à 15:42:46  profilanswer
 

Bonjour (encore http://forum.judgehype.com/icones/smilies/ack.gif)

 

Je me risque encore à poster un message parce que mine de rien, même si vous prenez pas des pincettes parfois, vous êtes de bon conseil  :D

 

Alors alors, voilà en gros ce que fait mon programme : Quand j'appuie sur un bouton "Load", le programme ouvre un fichier, puis effectue une boucle pour le lire (avec fgets). A chaque tour de boucle, j'incrémente un compteur qui me permet de garder en mémoire le numéro de la ligne à laquelle se trouve le programme.

 

Voici ce que je souhaiterais faire : lorsque le programme est à la ligne 1, il recopie l'intégralité de la ligne dans un Widget de saisie de texte.
Lorsque le programme est à la ligne 2, il enregistre la ligne dans une variable pour pouvoir l'utiliser plus tard.

 

Je rencontre deux problèmes :

  • Le premier, c'est que lorsque le programme est à la ligne 1, il me recopie la ligne dans le Widget mais il m'affiche le retour chariot à la fin de la ligne avec un drôle de symbole genre 'dessin qui veut rien dire'.
  • Le second problème, plus embêtant, et que je souhaiterais effectuer des opérations sur la seconde ligne. En effet, le programme lit la seconde ligne, l'enregistre dans une variable de type char, et me l'affiche. Elle vaut :    1.0000000000 (avec trois espaces avant le '1'). Je souhaiterais virer les trois espaces, et enregistrer le 1.0000000 sous forme de float. Y'a-t-il des fonctions simples pour cela ? J'ai regardé dans la documentation de la librairie string.h, mais visiblement je n'ai rien trouvé de direct.


Voici le code, pour info :

Code :
  1. lineCount = 1 ; // J'initialise le compteur de lignes
  2. while (fgets(line, 1024, contcarFile) != NULL)
  3. {
  4. if (lineCount == 1) // Je m'arrête à la première ligne
  5. {
  6. strcpy(contcarLabel, line) ; // J'enregistre la première ligne dans une chaîne
  7. gtk_entry_set_text(GTK_ENTRY(widget), contcarLabel) ;  //Je recopie la chaine dans le Widget
  8. }
  9. else if (lineCount == 2) // Je m'arrête à la deuxième ligne
  10. {
  11. strcpy(scaleFactor, line) ;  // J'enregistre la deuxième ligne dans une chaîne
  12. fprintf(stderr, "Scale Factor is : %s, scaleFactor) ; //Je demande à afficher la chaîne juste pour voir. Il m'affiche : '    1.000000000'
  13. }
  14. lineCount = lineCount + 1 ;  // J'incrémente le compteur de lignes
  15. }
 

Edit : Désolé je ne sais pas comment mettre des tabulations pour rendre le code plus clair -- Je n'ai pas mis les déclarations des variables

 

Merci encore  :hello:  

Message cité 1 fois
Message édité par Sinner le 24-07-2007 à 15:44:18
mood
Publicité
Posté le 24-07-2007 à 15:42:46  profilanswer
 

n°1590937
_darkalt3_
Proctopathe
Posté le 24-07-2007 à 15:48:28  profilanswer
 

Sinner a écrit :

  • Le premier, c'est que lorsque le programme est à la ligne 1, il me recopie la ligne dans le Widget mais il m'affiche le retour chariot à la fin de la ligne avec un drôle de symbole genre 'dessin qui veut rien dire'.

Tu récupères donc la sous-chaines du caractères 0 jusqu'à l'avant-dernier.
 

Sinner a écrit :

  • Le second problème, plus embêtant, et que je souhaiterais effectuer des opérations sur la seconde ligne. En effet, le programme lit la seconde ligne, l'enregistre dans une variable de type char, et me l'affiche. Elle vaut :    1.0000000000 (avec trois espaces avant le '1'). Je souhaiterais virer les trois espaces, et enregistrer le 1.0000000 sous forme de float. Y'a-t-il des fonctions simples pour cela ? J'ai regardé dans la documentation de la librairie string.h, mais visiblement je n'ai rien trouvé de direct.

atof ?


---------------
Töp of the plöp
n°1590940
Sinner
Trapped Inside This Octavarium
Posté le 24-07-2007 à 15:52:51  profilanswer
 

_darkalt3_ a écrit :


Tu récupères donc la sous-chaines du caractères 0 jusqu'à l'avant-dernier.


 


 
Merci pour la réponse rapide. J'ai déjà essayé atof, mais il m'affiche 'null', sûrement parce que j'ai dû m'enbrouiller avec les 'string' et 'float'.
 
Je vais potasser tes propositions.
 
Merci :)

n°1590975
Sinner
Trapped Inside This Octavarium
Posté le 24-07-2007 à 16:19:15  profilanswer
 

Désolé pour le double post.

 

J'ai donc modifié mon code pour la seconde ligne :

 
Code :
  1. else if (lineCount == 2)
  2. {
  3.         strcpy(scaleFactor, line) ;
  4.         scale = atof(scaleFactor) ;
  5.         fprintf(stderr, "Scale Factor : %f \n", scale) ;
  6. }
 

Il m'affiche bien 1.00000. Merci :jap:

 

Pour la première ligne, j'ai modifié le code :

Code :
  1. if (lineCount == 1)
  2. {
  3.         length = strlen(line) ;          // Il m'affiche 31. C'est bien le nombre de caractères de la première ligne
  4.         strncpy(contcarLabel, line, length) ;   // J'enregistre la ligne dans une chaine, en ne prenant pas le dernier caractère
  5.         gtk_entry_set_text(GTK_ENTRY(widget), contcarLabel) ; // J'affiche dans le widget
  6. }
 

Il m'affiche la première ligne avec plein de caractères bizarre derrière, ainsi que le message d'erreur suivant :


pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text()

 

Je dois sûrement faire une erreur dans le : strncpy(contcarLabel, line, length) ;

 

Edit : En fait il semblerait que le programme n'aime pas recopier une chaîne dans le widget (ou ailleurs) s'il n'y a pas de retour chariot à la fin de la chaîne.
Or mon but c'est de supprimer le retour chariot parce que ça me fait un symbole louche à l'impression :/

Message cité 1 fois
Message édité par Sinner le 24-07-2007 à 16:40:52
n°1590983
_darkalt3_
Proctopathe
Posté le 24-07-2007 à 16:33:54  profilanswer
 

Sinner a écrit :

Je dois sûrement faire une erreur dans le : strncpy(contcarLabel, line, length) ;


T'aurais pas juste supprimé le '\0' au lieu du dernier caractère ?


---------------
Töp of the plöp
n°1590984
Sinner
Trapped Inside This Octavarium
Posté le 24-07-2007 à 16:35:43  profilanswer
 

Beh en fait mon but c'était de supprimer le '\0', parce que ça me fait un symbole bizarre à l'impression.

n°1590986
_darkalt3_
Proctopathe
Posté le 24-07-2007 à 16:42:53  profilanswer
 

ah ouais je dis n'imp ok


---------------
Töp of the plöp
n°1590988
Sinner
Trapped Inside This Octavarium
Posté le 24-07-2007 à 16:46:25  profilanswer
 

Mais sinon tu as raison, lorsque j'enlève le '\0' volontairement à la fin de la chaîne, et que je demande à afficher la chaîne, il n'aime po.


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

  [C] Problèmes avec les chaines de caractères

 

Sujets relatifs
AES / RSA : Bad Data error et autres problemes (de stream?)[QST] Problèmes de links
File.ListFiles et caractères accentuésComment ajouter des caractéres dans une chaine facilement ?
Problèmes $_COOKIE et $_POSTcaractères spéciaux : extraction de base de données pour XML
Récupérer des données avec un nbre de caractères spécifiques[Batch] [Résolu]Analyse d'une chaine de caractères + redimensionnement
Menu en html, css et javascript, nombreux problèmesProgrammation php/htlm/mysql avec caractères asiatiques.
Plus de sujets relatifs à : [C] Problèmes avec les chaines de caractères


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR