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