Comparaison de char

Comparaison de char - C - Programmation

Marsh Posté le 11-10-2006 à 18:54:25    

Bonjour,
 
j'ai pas fait de C depuis 5 ans alors je galere pour modifier un petit exe...
 
j'ai une variable varname qui me permet de recupere une parametre de ma fonction.
 
int main (int ac, char *av[]) {
 
   char *varname;
   varname = av[2];
 
  if (comparaison) {
      traitement1
  } else {
 
  }
...
 
}
 
En fonction de la valeur de cette variable, je dois faire un traitement ou un autre.
 
J'ai essayé plusieurs facon de faire ma comparaison mais aucune ne marche
 
J'ai essayé la plus simple : varname == "TIME"
j'ai aussi essayé strcmp(varname,"TIME" )
 
Mais je passe toujours dans le cas 2 meme si j'ai bien TIME en entrée.
 
vous pouvez m'aider ?
 
 
 
 

Reply

Marsh Posté le 11-10-2006 à 18:54:25   

Reply

Marsh Posté le 11-10-2006 à 19:02:40    

il manque pas un caractere speciale devant ou derriere ta variable varname dans l'appel à strcmp ? c'est un pointeur donc ....

Reply

Marsh Posté le 11-10-2006 à 20:21:16    

man strcmp

Reply

Marsh Posté le 11-10-2006 à 21:12:57    

circeedevalette a écrit :

int main (int ac, char *av[])


On nomme généralement les arguments de main "argc" et "argv". Mais ce n'est qu'une convention et tu peux leur donner le nom que tu veux.
 

circeedevalette a écrit :

J'ai essayé la plus simple : varname == "TIME"


Là tu ne compares que 2 pointeurs...

circeedevalette a écrit :

j'ai aussi essayé strcmp(varname,"TIME" )
Mais je passe toujours dans le cas 2 meme si j'ai bien TIME en entrée.


Si t'as écrit

if (strcmp(varname, "TIME" ))
    traitement1
else
    traitement2


Ben c'est normal. Quand les chaînes sont égales, la fonction renvoie 0 (d'où la remarque de Taz). Donc si elles sont égales, le "if" verra "if (0)" et considèrera le test comme faux !!!

if (strcmp(varname, "TIME" ) == 0)
    traitement1
else
    traitement2


Message édité par Sve@r le 11-10-2006 à 21:14:50

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 12-10-2006 à 00:46:09    

circeedevalette a écrit :


Code :
  1. int main (int ac, char *av[]) {
  2.    char *varname;
  3.    varname = av[2];
  4.   if (<comparaison> ) {
  5.       traitement1
  6.   } else {
  7.   }
  8. ...
  9. }


j'ai aussi essayé strcmp(varname,"TIME" )
 


 

  • Avant d'utiliser av[2], tu devrais t'assurer que ac > 2, sinon, ça va chi*r.
  • strcmp() est la solution, mais en cas d'égalité elle retourne 0. C'est peut être ça que tu as oublié...

Message cité 1 fois
Message édité par Emmanuel Delahaye le 12-10-2006 à 00:47:07

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 12-10-2006 à 09:40:49    

Emmanuel Delahaye a écrit :

  • Avant d'utiliser av[2], tu devrais t'assurer que ac > 2, sinon, ça va chi*r.
  • strcmp() est la solution, mais en cas d'égalité elle retourne 0. C'est peut être ça que tu as oublié...


yes, merci pour avoir aidé un boulet !!
 
ca faisait une heure que je tournais dans tous les sens et j'avais plus les idées assez claires.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed