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

  FORUM HardWare.fr
  Programmation
  C

  aide sscanf

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

aide sscanf

n°1474018
Edgar_Perr​y
Posté le 11-11-2006 à 21:35:40  profilanswer
 

Bonjour,  
 
dans le code suivant je cherche à découper un tableau en deux en connaissant le séparateur ';'
 
Je connais la taille maximum de mes deux sous chaines (10 caratères);
 
J'ai essaté plusieurs combinaison pour le format de sscanf et j'ai toujours le résultat suivant (mon fprintf):
       "Contenu des tab apres <ABCDEF;IJKL          ><ABCDEF;IJK><          >"
 
 
Je n'arrive pas à lui faire comprendre que mon séparateur est le ;
 
Auriez vous une idée ?
 
Ps: Ajout de string.h pour ne plus faire peur à Emmanuel  
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(){
  4. char Tab[21],T1[10],T2[10]  ;
  5.     memset(Tab,' ',21);
  6.     memset(T1,' ',10);
  7.     memset(T2,' ',10);
  8.     memcpy(Tab,"ABCDEF;IJKL",11);
  9.     fprintf(stderr,"\n Contenu des tab avant <%.21s><%.10s><%.10s>",Tab,T1,T2);fflush(stderr);
  10.     sscanf(Tab,"%10s ;%10s",T1,T2);
  11.     fprintf(stderr,"\n Contenu des tab apres <%.21s><%.10s><%.10s>",Tab,T1,T2);fflush(stderr);
  12. return 0;
  13. }

Message cité 1 fois
Message édité par Edgar_Perry le 11-11-2006 à 21:50:28
mood
Publicité
Posté le 11-11-2006 à 21:35:40  profilanswer
 

n°1474019
Emmanuel D​elahaye
C is a sharp tool
Posté le 11-11-2006 à 21:46:27  profilanswer
 

Edgar_Perry a écrit :

dans le code suivant je cherche à découper un tableau en deux en connaissant le séparateur ';'

Code :
  1. sscanf(Tab,"%10s ;%10s",T1,T2);



 [:arrakys]

Project   : Forums
Compiler  : GNU GCC Compiler (called directly)
Directory : C:\dev\forums2\
--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.c
main.c: In function `main':
main.c:6: warning: implicit declaration of function `memset'
main.c:9: warning: implicit declaration of function `memcpy'
Linking console executable: C:\dev\forums2\console.exe
Process terminated with status 0 (0 minutes, 3 seconds)
0 errors, 2 warnings


Ce que tu veux faire ne fonctionne pas avec des chaines pour scanf(). Pour des valeurs numériques, oui.
 
Il n'y pas d'autre choix que l'analyse manuelle (strchr()) ou avec strtok() qui a quelques défauts plus ou moins gênants (bien lire la doc).
 
Ton code est beaucoup trop compliqué et il passe à coté de ce qui est important...

Code :
  1. #include <stdio.h>
  2. int main (void)
  3. {
  4.    char Tab[21] = "ABCDEF;IJKL";
  5.    char T1[11] = "";
  6.    char T2[11] = "";
  7.    printf ("Contenu des tab avant <%-21s><%-10s><%-10s>\n", Tab, T1, T2);
  8.    if (sscanf (Tab, "%s;%s", T1, T2) == 2)
  9.    {
  10.       printf ("Contenu des apres avant <%-21s><%-10s><%-10s>\n", Tab, T1, T2);
  11.    }
  12.    else
  13.    {
  14.       puts ("erreur de format" );
  15.    }
  16.    return 0;
  17. }



Contenu des tab avant <ABCDEF;IJKL          ><          ><          >
erreur de format
 
Press ENTER to continue.


Message édité par Emmanuel Delahaye le 11-11-2006 à 21:58:15

---------------
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°1474028
Edgar_Perr​y
Posté le 11-11-2006 à 22:14:37  profilanswer
 

Ok , je prends note pour le sscanf.
J'aurais une remarque par rapport à ton initialisation car il me semble quand faisant comme ceci, il va rajouter un null terminated à la fin. Mes tableaux ont la particularité de ne pas avoir de nulle terminated à la fin. c'est pour cela que dans mon exemple, je suis passé par les memcpy.

n°1474038
Emmanuel D​elahaye
C is a sharp tool
Posté le 11-11-2006 à 22:42:08  profilanswer
 

Edgar_Perry a écrit :

Ok , je prends note pour le sscanf.
J'aurais une remarque par rapport à ton initialisation car il me semble quand faisant comme ceci, il va rajouter un null terminated à la fin. Mes tableaux ont la particularité de ne pas avoir de nulle terminated à la fin. c'est pour cela que dans mon exemple, je suis passé par les memcpy.


What ? Et tu utilises sscanf() sur des chaines qui n'en sont pas ?
 [:arrakys]
Alors l'analyse doit être faite complètement à la main. Pas question d'utiliser la moindre fonction chaine.


Message édité par Emmanuel Delahaye le 11-11-2006 à 22:44:12

---------------
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/

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

  aide sscanf

 

Sujets relatifs
[résolu] Besoin d'aide pour écrire une requête SQL compliquéeaide en c # sur une erreur CS01117
Aide En C++ Suite De Conway (Urgent!!!)Aide HTML
aide en c : ds1621Aide programme C++
aide pour un programme en c++Besoin d'aide pour une expression régulière
aide commande...fprintf fscanf sscanf sprintf ???????????aide rapide sscanf
Plus de sujets relatifs à : aide sscanf


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