Problème avec sscanf - C++ - Programmation
Marsh Posté le 08-11-2005 à 08:12:25
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,
|
Marsh Posté le 08-11-2005 à 13:05:22
Bonjour,
essaye quelque chose comme ca. J'ai remplace les alloc dynamiques par des variables simples pour
plus de lisibilite.
Code :
|
Marsh Posté le 07-11-2005 à 12:21:59
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:
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 !