pb valeur ascii - C++ - Programmation
Marsh Posté le 23-12-2004 à 13:45:37
Bonjour,
1/ Votre code vérifie si le PREMIER caractère de la chaîne vaut '*' : c'est bien ce que vous vouliez ?
2/ Pour tester si le caractère c vaut '*' on fait c=='*'; pour savoir si la chaîne s vaut "*" on fait s == "*". Est-ce que vous voyez la différence ?
3/ il faudrait que vous postiez plus de code pour savoir d'où vient le problème.
Marsh Posté le 23-12-2004 à 14:34:41
suizokukan a écrit : pour savoir si la chaîne s vaut "*" on fait s == "*". |
Avec les std::string oui, mais pas si c'est un char*
Marsh Posté le 23-12-2004 à 14:58:30
heu bah en fait on souhaite verifier que le premier caractere de notre chaine est un operateur mathematique(+ - * /) tous les otres operateur fonctionnent sf le * pk ?,
if ((test[0]=='+')||(test[0]=='-')||(test[0]=='/')||(test[0]=='*')){
return 0;
}
Marsh Posté le 23-12-2004 à 15:56:17
C'est bizarre; il y a certains caractères avec qui il pourrait y avoir des problèmes (genre " et \ qu'il faut écrire '\"' et '\\') mais le caractère '*' n'en fait pas partie. Vous êtes certains des données avec lesquelles vous faites le test ?
Marsh Posté le 23-12-2004 à 16:02:13
Oui, j'en suis certain puisque c'est moi qui lui rentre en ligne de commande
Marsh Posté le 23-12-2004 à 16:07:35
Essayez de tester la fonction sans passer par la ligne de commande, en initialisant la chaîne test juste avant votre
Code :
|
Vous essayez avec "+123", "-123", "/123" et enfin "*123" et vous regardez à chaque fois ce que renvoie la fonction. Mais je crois que l'erreur ne vient vraiment pas de la manière dont le test est conçu mais plutôt de ce qui se passe avant.
Marsh Posté le 23-12-2004 à 16:18:08
en effet, si je ne passe pas par la ligne de commande mon teste fonctionne corectement.
Mais bon pourquoi cela produit une erreur quand je passe par la ligne de commande ???car moi il faut que je pase par la ligne de commande
Marsh Posté le 23-12-2004 à 16:21:29
L'erreur est donc entre le moment où vous récupérez la ligne de commande et le moment où vous passez les données au
Code :
|
Postez donc le reste du code utile.
Marsh Posté le 23-12-2004 à 16:24:36
int main(int argc, char *argv[]){
if(argc<4){
cout<<"Erreur d'utilisation."<<endl;
cout<<"Usage : <nom programme> <opération>."<<endl;
return 1;
}
else{
MaPile=new Pile();
while(argc!=1){
verif=testValeur(argv[tmp]);
if (verif==-1){
cout<<"erreur de syntaxe!!!"<<endl;
exit (1);
}
MaPile->Empiler(argv[tmp]);
argc--;
tmp++;
}
Marsh Posté le 23-12-2004 à 16:31:01
Avant toutes choses, dépêche-toi de mettre ton code entre des balises avant que ça ne rale...
1/ édite ton message - cherche l'icône dans cette fenêtre qui se trouve à côté de 'Posté le 23-12-2004 à 13:16:37' -
2/ une fois dans la fenêtre d'édition sélectionne ton code
3/ utilise l'icône C/C++ qui mettra ta sélection entre deux balises.
et surtout apprends à INDENTER ton code svp !
Marsh Posté le 23-12-2004 à 16:33:56
1/Même si ce n'est pas le fond du problème, supprime l' exit() de ton main et débrouille-toi pour que main() renvoie une valeur (EXIT_SUCCESS si ok/EXIT_FAILURE en cas d'erreur)
2/La ligne de code que t'as postée au-dessus [if(test)] fait donc partie de la fonction testValeur(). Poste s'il te plaît le contenu exact de cette fonction (avec sa déclaration).
Marsh Posté le 23-12-2004 à 16:36:36
Et que vaut tmp avant d'arriver ici :
Code :
|
Donne du code un peu plus complet sinon on va y passer trop de temps.
Marsh Posté le 23-12-2004 à 16:44:41
Ok c'est bon, je vois peut-être d'où vient l'erreur :
Le caractère '*' a une signification spéciale pour l'OS; pour supprimer cette signification, il faut mettre tes arguments entre guillemets.
Du genre : mon_prog.exe "+123" "*627"
C'était vraiment trop bête...
Marsh Posté le 23-12-2004 à 16:49:15
oui merci comme tu dis c'est très bête mais bon ca complique l'utilisation de mon programme.
Marsh Posté le 23-12-2004 à 16:57:50
Dis à l'utilisateur de mettre un x au lieu du *
Effectivement on ne peut pas passer n'importe quel caractère en argument à un programme...
Marsh Posté le 23-12-2004 à 17:00:33
ouep je pense ke je vais faire ca mais ca va demandé bcp d'effort a l'utilisateur lol
Marsh Posté le 23-12-2004 à 17:01:08
Sinon passe tes arguments via un fichier temporaire ... ou bien mets les tous entre guillemets sur ta ligne de commande. En quoi est-ce que cela complique l'utilisation de ton programme ?
Marsh Posté le 23-12-2004 à 18:28:57
bah le fait que l'utilisateur mette des guillement sur le * ca evient contraignant pour lui mais bon je pense que je vais faire comme TotalRecall le suggérrait et remplacer le le * par un x.
Merci quand même de ton aide
Marsh Posté le 23-12-2004 à 13:21:32
Déclaration de la fonction :
Corps de la fonction :
Message édité par LN22 le 23-12-2004 à 16:42:31