aide sscanf

aide sscanf - C - Programmation

Marsh Posté le 11-11-2006 à 21:35:40    

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
Reply

Marsh Posté le 11-11-2006 à 21:35:40   

Reply

Marsh Posté le 11-11-2006 à 21:46:27    

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

Marsh Posté le 11-11-2006 à 22:14:37    

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.

Reply

Marsh Posté le 11-11-2006 à 22:42:08    

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

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed