Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1086 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  pb valeur ascii

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pb valeur ascii

n°930925
LN22
Posté le 23-12-2004 à 13:21:32  profilanswer
 

Déclaration de la fonction :

Code :
  1. int testValeur(char *test);


 
Corps de la fonction :

Code :
  1. int testValeur(char *test){
  2.   unsigned  int cpt;
  3.   char caract;
  4.   int flag=1;
  5.   if ((test[0] =='+')||(test[0]=='-')||(test[0]=='/')||(test[0]=='*')){
  6.     return 0;
  7.   }else{
  8.     for (cpt=0;cpt<strlen(test);cpt++){
  9.       caract=test[cpt];
  10.       if((caract>=':'&&caract<='~')||(caract>='!'&&caract<=')')){
  11. flag=0;//si c'est un caractère est une lettre c'est une erreur.
  12.       }
  13.     }
  14.     if (flag==0) return -1;
  15.     else return 1;
  16.   }
  17. }


Message édité par LN22 le 23-12-2004 à 16:42:31
mood
Publicité
Posté le 23-12-2004 à 13:21:32  profilanswer
 

n°930941
suizokukan
Posté le 23-12-2004 à 13:45:37  profilanswer
 

 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.

n°930968
antp
Super Administrateur
Champion des excuses bidons
Posté le 23-12-2004 à 14:34:41  profilanswer
 

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* :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°930984
LN22
Posté le 23-12-2004 à 14:58:30  profilanswer
 

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;
  }

n°931010
suizokukan
Posté le 23-12-2004 à 15:56:17  profilanswer
 

 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 ?

n°931015
LN22
Posté le 23-12-2004 à 16:02:13  profilanswer
 

Oui, j'en suis certain puisque c'est moi qui lui rentre en ligne de commande

n°931019
suizokukan
Posté le 23-12-2004 à 16:07:35  profilanswer
 

 Essayez de tester la fonction sans passer par la ligne de commande, en initialisant la chaîne test juste avant votre
 

Code :
  1. if ((test[0]=='+')||(test[0]=='-')||(test[0]=='/')||(test[0]=='*')){
  2.     return 0;
  3.   }


 
  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.

n°931024
LN22
Posté le 23-12-2004 à 16:18:08  profilanswer
 

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

n°931028
suizokukan
Posté le 23-12-2004 à 16:21:29  profilanswer
 

 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 :
  1. if ((test[0]=='+')||(test[0]=='-')||(test[0]=='/')||(test[0]=='*')){
  2.         return 0;
  3.        }


 
  Postez donc le reste du code utile.

n°931032
LN22
Posté le 23-12-2004 à 16:24:36  profilanswer
 

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++;
    }

mood
Publicité
Posté le 23-12-2004 à 16:24:36  profilanswer
 

n°931035
LN22
Posté le 23-12-2004 à 16:26:05  profilanswer
 

voila en gros l'appel de la fonction de test

n°931038
suizokukan
Posté le 23-12-2004 à 16:31:01  profilanswer
 

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 !


Message édité par suizokukan le 23-12-2004 à 16:50:22
n°931039
suizokukan
Posté le 23-12-2004 à 16:33:56  profilanswer
 

 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).

n°931040
suizokukan
Posté le 23-12-2004 à 16:36:36  profilanswer
 

  Et que vaut tmp avant d'arriver ici :
 

Code :
  1. verif=testValeur(argv[tmp]);


 
Donne du code un peu plus complet sinon on va y passer trop de temps.

n°931043
LN22
Posté le 23-12-2004 à 16:43:11  profilanswer
 

voila le code de la fonction testValeur

n°931045
suizokukan
Posté le 23-12-2004 à 16:44:41  profilanswer
 

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

n°931047
LN22
Posté le 23-12-2004 à 16:49:15  profilanswer
 

oui merci comme tu dis c'est très bête mais bon ca complique l'utilisation de mon programme.

n°931062
TotalRecal​l
Posté le 23-12-2004 à 16:57:50  profilanswer
 

Dis à l'utilisateur de mettre un x au lieu du * [:joce]
Effectivement on ne peut pas passer n'importe quel caractère en argument à un programme...


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°931064
LN22
Posté le 23-12-2004 à 17:00:33  profilanswer
 

ouep je pense ke je vais faire ca mais ca va demandé bcp d'effort a l'utilisateur lol

n°931066
suizokukan
Posté le 23-12-2004 à 17:01:08  profilanswer
 

 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 ?

n°931109
LN22
Posté le 23-12-2004 à 18:28:57  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  pb valeur ascii

 

Sujets relatifs
[C]Valeur en volt de la tension d'un signal Audio en entréeChanger la valeur par Défaut d'un CheckBox pour un visiteur !!
Windows, Linux et retour chariot \n (ASCII 13)Valeur résultat dans une fonction shell ?
problème lecture d'une valeur avec le caractere slach[Access] Rappel d'une valeur sur un nouvel enregistrement
formulaires : recuperer la valeur d'un bouton radioRecuprer la valeur choisie d'une liste deroulante
Help me Transformer en ascii la valeur hexa 0A[C] Fonction retournant la valeur ASCII d'un char
Plus de sujets relatifs à : pb valeur ascii


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR