| scol30 | Il y a un souci aved ce que tu as poste:
 int pnSolid=new int; <<<< soit c'est un simple int et tu ne fais pas de new et tu passes une ref au sscanf
 <<<< soit c'est 1 pointeur alors int *pnSolid = new int;
 
 Pour ce qui est de trouver le nombre de mots dans la string utilise plutot des std::string ce sera plus simple.
 #include <string>
 
 std::string strNewEntity= "texture Concrete 1e-021 3 1 0 0 1 0.2 15000804";
 std::string::iterator myIter = strNewEntity.begin();
 for(;myIter != strNewEntity.end();myIter++)
 if(*myIter == ' ')
 count++;
 count++;
 if(count == 11) {
 nRet = 0;
 } else {
 nNbChamps = sscanf(strNewEntity.c_str(), "%s %s %lf %lf %f %f %f %d %lf %d",
 cType, cName, pdbConduct, pdbPermit, pfReflexion,
 pfTransparence, pfDiffraction, pnSolid, pdbEpaisseur,
 pcolor);
 }
 
 
 | Sissi80 a écrit : 
 
 Salut,
J'ai un problème bizarre avec sscanf.
 Voila, je dois lire une string contenant 10 mots:
 
 ---
 strNewEntity="texture  Concrete 1e-021 3 1 0 0 1 0.2 15000804";
 ---
 
 Le problème, c'est que certaines de mes strings contiennent 11 mots:
 
 ---
 strNewEntity="texture  Concrete 1e-021 3 1 0 0 NONE 1 0.2 15000804";
 ---
 
 Pour lire ces strings, je voudrais d'abord vérifier si ma string a 11 mots et dans le cas contraire, lire seulement 10 mots. J'ai codé ceci comme ça:
 
 
 | Citation : 
 
 
char cType[32];
 char cName[256];
 char cDiffusion[8];
 double *pdbConduct = new double;
 double *pdbPermit = new double;
 float *pfReflexion = new float;
 float *pfTransparence = new float;
 float *pfDiffraction = new float;
 int pnSolid=new int;
 double *pdbEpaisseur = new double;
 COLORREF *pcolor = new COLORREF;
 
 nNbChamps = sscanf(strNewEntity, "%s %s %lf %lf %f %f %f %c %d %lf %d",
 cType, cName, pdbConduct, pdbPermit, pfReflexion, pfTransparence,
 pfDiffraction, cDiffusion, pnSolid, pdbEpaisseur, pcolor);
 
 if(nNbChamps == 11)
 {
 nRet = 0;
 }
 else
 {
 nNbChamps = sscanf(strNewEntity, "%s %s %lf %lf %f %f %f %d %lf %d",
 cType, cName, pdbConduct, pdbPermit, pfReflexion, pfTransparence,
 pfDiffraction, pnSolid, pdbEpaisseur, pcolor);
 
 | 
}
 
 Or, si je lis une string avec 10 mots, sscanf me renvoie quand même 11.
 Ses affectations sont plutôt bizarres:
 
 *pfDiffraction=1
 *pnSolid=0 (<- pourquoi 0 ?)
 *pdbEpaisseur=0.2
 *pcolor=15000804
 
 Merci de me renseigner si vous pouvez !
 
 | 
   |