Accueil > Forum > > > > intégration QT : pb avec sscanf
intégration QT : pb avec sscanf
lundi 30 novembre 2009 à 23:31:25 |
intégration QT : pb avec sscanf

lural
|
Bonsoir à tous !
Un rapide exposé de mon travail, j'ai un projet en openGL qui tourne nickel (sous linux) et je souhaite l'intégrer dans une qglwidget pour une interface QT. Après nombreuses batailles j'arrive à compiler et tout, mais mes pièces ne s'affichent plus. Mes pièces sont des fichiers .obj que je charge dans un loader perso.
Le problème, depuis l'intégration QT, la lecture de ces fichiers ne tourne plus correctement...
Code (épurée):
float a, b, c;
char oneline[255];
while( readstr(filein,oneline) != 0)
{
printf("oneline : %s", oneline);
sscanf(oneline, "%s %f %f %f", buftmp, &a, &b, &c);
printf("scanf => %s %f %f %f\n\n", buftmp, a, b, c);
}
Et en sortie :
oneline : vn 0.831446 0.000000 -0.555559
scanf => vn 0,000000 0,000000 0,000000
Alors certes je pourrais faire un découpage différent mais vu l'avancement du projet, je préfèrerais comprendre l'erreur et patcher ça rapidement.
Je rappel que ces lignes fonctionnent sans l'interface QT, j'ai testé de passer les variables a, b, c en double (en vain).
Merci de votre attention
Je suis tout ouïe à vos suggestions
Bonne soirée à tous
|
|
mardi 1 décembre 2009 à 00:48:36 |
Re : intégration QT : pb avec sscanf

CptPingu
|
J'ai essayé ceci, en C et C++ et tout semble fonctionner. QT n'est qu'un framework, et n'a normalement pas d'incidence sur le reste.
Code C/C++ :
#include <stdio.h>
int main(void)
{
float a, b, c;
char oneline[256] = "vn 0.831446 0.000000 -0.555559";
char buftmp[256] = {0};
printf("oneline : %s", oneline);
sscanf(oneline, "%s %f %f %f", buftmp, &a, &b, &c);
printf("\n\nscanf => %s %f %f %f\n\n", buftmp, a, b, c);
return 0;
}
As-tu essayé de faire du C++ au lieu de faire du C ?
Par exemple:
Code C/C++ :
#include <iostream>
#include <sstream>
int main(void)
{
float a, b, c;
char oneline[256] = "vn 0.831446 0.000000 -0.555559";
std::string buftmp;
std::cout << "oneline : " << oneline << std::endl;
std::istringstream iss(oneline);
iss >> buftmp >> a >> b >> c;
std::cout << "\n\nscanf => "
<< buftmp << " "
<< a << " "
<< b << " "
<< c << std::endl;
return 0;
}
|
|
mardi 1 décembre 2009 à 01:01:10 |
Re : intégration QT : pb avec sscanf

lural
|
Merci CptPingu.
Alors oui en effet, istringstream fonctionne bien, et je sens que je vais tout re-coder avec ça... mais j'avoue que ça ne satisfait pas ma curiosité sur mon précédent résultat avec sscanf.
QT n'est qu'un framework, mais essayez de compiler un projet classique avec QT et vous risquez de voir certaines erreurs que g++ ne me signalé pas. Alors oui, je sais que le qmake ne gènerera qu'un Makefile qui utilise g++/gcc. Mais, même si je n'ai pas envie de trop fourrer mon nez dans des Makefile auto-généré, il s'avère que les résultats des compilations diffèrent...
Et selon mon exemple, le programme ne s'exécute pas de la même manière.
Donc pour résumé, merci beaucoup pour ton aide, je reste à l'écoute pour comprendre en quoi le sscanf "déconne" dans de telles circonstances.
|
|
mardi 1 décembre 2009 à 01:45:24 |
Re : intégration QT : pb avec sscanf

lural
|
Après avoir repassé tout mon code avec des istringstream ... j'ai la surprise du siècle (de mon incompétence surtout)
Dans certains cas, istringstream fonctionne correctement :
ex : vn 0.831446 0.000000 -0.555559
Pour d'autre cas, il ne fonctionne pas comme je l'aurais pensé :
ex : f 191/191/191 190/190/190 222/222/222 223/223/223
La ligne suivante ne me renvoi de valeurs correcte que pour a
iss >> buftmp >> a >> b >> c >> d >> e >> f >> g >> h >> i >> j >> k >> l;
La ligne suivante fonctionne correctement :
sscanf(oneline, "%s %f/%f/%f %f/%f/%f %f/%f/%f %f/%f/%f", buftmp, &a, &b, &c, &d, &e, &f, &g, &h, &i, &j, &k, &l);
Alors soit je perd la boule, soit j'utilise mal istringstream lors du parsage où les délimiteurs donc des "/".
En espérant ne pas perdre la boule...
Merci pour votre attention
|
|
mardi 1 décembre 2009 à 10:21:16 |
Re : intégration QT : pb avec sscanf

CptPingu
|
Réponse acceptée !
mais j'avoue que ça ne satisfait pas ma curiosité sur mon précédent résultat avec sscanf.
Pour moi, tu as fait les choses correctement, et je ne vois pas pourquoi ça déconnerais. Reste que le mélange C et C++ (plus que QT), pourrait poser problème, mais je ne saurais te l'expliquer.
Pour d'autre cas, il ne fonctionne pas comme je l'aurais pensé :
ex : f 191/191/191 190/190/190 222/222/222 223/223/223
La ligne suivante ne me renvoi de valeurs correcte que pour a
iss >> buftmp >> a >> b >> c >> d >> e >> f >> g >> h >> i >> j >> k >> l;
N'oublie pas que std::istringstream prend comme délimiteur par défaut tout ce qui est dans isspace. Donc il faut que tu lui dises que "/" est délimiteur aussi.
Le même example, avec délimiteur:
Code C/C++ :
#include <iostream>
#include <sstream>
int main(void)
{
float a, b, c;
char oneline[256] = "vn 0.831446/0.000000/-0.555559";
std::string buftmp;
char delim;
std::cout << "oneline : " << oneline << std::endl;
std::istringstream iss(oneline);
iss >> buftmp >> a >> delim >> b >> delim >> c;
std::cout << "\n\nscanf => "
<< buftmp << " "
<< a << " "
<< b << " "
<< c << std::endl;
return 0;
}
|
|
mardi 1 décembre 2009 à 18:28:08 |
Re : intégration QT : pb avec sscanf

lural
|
Excellent, j'ai plus qu'a tester ça. Moi qui pensait devoir parser en partie ma chaine, je suis ravi de voir que istringstream est intelligent pour un problème comme ça :D
Merci beaucoup CptPingu
|
|
mardi 1 décembre 2009 à 18:33:54 |
Re : intégration QT : pb avec sscanf

CptPingu
|
Excellent, j'ai plus qu'a tester ça. Moi qui pensait devoir parser en partie ma chaine, je suis ravi de voir que istringstream est intelligent pour un problème comme ça :D
Attention tout de même, ce n'est pas une propriété de std::istringstream, mais un bon gros hack !
En effet, "delim" étant un caractère, std::instringstream va le remplir avec '/', comme si on le lui demandait.
Si on avait eu ça: "vn 0.831446/0.000000@-0.555559", ça aurait aussi fonctionner !
Normalement, la méthode propre pour faire cela, est en passant par un std:getline auquel on donne la liste des délimiteurs.
Vu que tu cherches juste à faire fonctionner ton truc, je t'ai donné une méthode rapide, mais ce n'est pas la plus robuste et propre :p
|
|
mardi 1 décembre 2009 à 21:27:34 |
Re : intégration QT : pb avec sscanf

lural
|
Pour la robustesse, ça pourra toujours être apporter plus tard. Pour le côté propre, bien sur je pourrais tester que la caractère de séparation soit bien '/' ... mais les fichiers .obj que je charge ont une référence plutôt précise, et à laquel je souhaite coller. Donc pour ce cas là, ce sera largement suffisant.
Et par simple curiosité, pour ton explication :
Si on avait eu ça: "vn 0.831446/0.000000@-0.555559", ça aurait aussi fonctionner !
Je me demandais si j'avais eu : "vn 0.831446/0.000000-0.555559" est ce que cela aurait fonctionner ?
Je vais tester ça dessuite.
En tout cas MERCI ;)
|
|
Cette discussion est classée dans : pb, qt, intégration, sscanf, oneline
Répondre à ce message
Sujets en rapport avec ce message
Les variables globales...... [ par netman ]
Bon la j'ai un petit probleme (normal sinon je poserais pas de question ....)Bon je fait un petit programme et la je suis confronte a un pb .....J'uti
pb de base de donnee en C [ par tequ13 ]
j'aimerais savoir comment faire pour charger des fichiers (*.txt) a l'ouverture d'un programme pour ensuite les comparer et repérer les doublons pour
pb avec procedure [ par bidules ]
bonjour,voila mon code(simplifier) :void affiche(int numero){cout }void main(){affiche(10);}et un message d'erreur apparait lors de la compilation
Pb code source CMphSock [ par xaviou ]
Salut.J'ai téléchargé le projet "CMphSock" : Utilisation de Winsock sans MFC.Je l'ai compilé en mode Debug : tout est OKJ'ai essayé en mode Release :
petit pb de type string [ par bidules ]
D'apres ce que g pu apprendre lorsque l'on veut declarer une variable de type string il faut faire :#include string variable;c bien ca? car qd je fais
pb de grille avec visual C++ [ par cedcrow ]
Salut,je cherche à rendre éditable les cellules créés dans mon objet de type flexgrid (comme un tableur excel quoi !). Je ne trouve pas la méthode app
Pb avec Glut sous Visual C++ [ par Yoann ]
Bonjour !Je viens de me mettre à OpenGL avec Glut, mais j'ai un petit problème. En effet, quand je compile un exemple, j'ai l'erreur suivante :TestGlu
Pb avec Glut sous VC++ et Dev [ par mederic ]
Je ne sais pas si ça vient de mon include ou autre chose. Mais je n'arrive pas executer un exemple simple sur plusieurs compilateurs.Sur VC++, il écri
un ti pb sur les tableaux [ par Julius Caesar ]
On range dans un tableau 8 entiers générés aléatoirement par l'ordi. coment faire pour être sur que chaque nombre généré soit uniquen c'est à dire qu'
pb avec gluLookAt() ! [ par naugondo ]
Comment ça marche !!En fait, a quoi correpondent les 3 dernières coordonnées ?
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|