transformer un char* en int

transformer un char* en int - C - Programmation

Marsh Posté le 09-06-2004 à 16:56:28    

Bonjour,
Je récupère un char* grâce à la fonction strtok (qui est en fait un entier).
Puis après je veux le comparer à un entier.
Pour forcer le char* en int j'ai fait lors de ma comparaison :
if(a == (int)b)
mais ca ne semble pas marcher.
Quelqu'un pour m'aider.
Merci :-)

Reply

Marsh Posté le 09-06-2004 à 16:56:28   

Reply

Marsh Posté le 09-06-2004 à 16:58:48    

ouh putain, que Taz ne passe pas par ici [:psywalk]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 09-06-2004 à 17:00:43    

et sinon à part me faire démonter la gueule par Taz personne pour m'aider ;)
comme ca après je peux auto-censurer mon post :-)

Reply

Marsh Posté le 09-06-2004 à 17:01:28    

ça ne t'est jamais venu à l'esprit d'utiliser sscanf :??:

Reply

Marsh Posté le 09-06-2004 à 17:03:39    

t'as la fonction strtol() pour transformer une chaine en integer


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 09-06-2004 à 17:04:08    

moktar1er a écrit :

ça ne t'est jamais venu à l'esprit d'utiliser sscanf :??:

oui, aussi !


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 09-06-2004 à 17:07:48    

hem, tu essaye donc de convertire un char* en int... ben au mieux tu va te retrouver avec l'adresse du premier caractère de ta chaine de caractères, convertie en entier. donc en gros, pas du tout ce que tu veux. la fonction qui irais bien serais "int atoi(char *)", si je me souviens bien... tu lui donne le pointeur sur le premier caractère de ta chaine (donc ta variable int* b), et il lis un entier dedans, et te le renvois en int. je pense que c plus rapide que sscanf, qui soit dis en passant, marche très bien aussi :

Code :
  1. int a;
  2. char b[]="10";
  3. sscanf(b,"%d",&a);

Reply

Marsh Posté le 09-06-2004 à 17:08:23    

Harkonnen a écrit :

t'as la fonction strtol() pour transformer une chaine en integer


ah oui, aussi

Reply

Marsh Posté le 09-06-2004 à 17:37:44    

merci atoi marche très bien

Reply

Marsh Posté le 09-06-2004 à 18:57:39    

mirascheat a écrit :

merci atoi marche très bien

ah ouais ? et comment tu fais pour gérer une erreur éventuelle ? genre atoi("Taz" )

Reply

Marsh Posté le 09-06-2004 à 18:57:39   

Reply

Marsh Posté le 09-06-2004 à 19:23:20    

Taz a écrit :

ah ouais ? et comment tu fais pour gérer une erreur éventuelle ? genre atoi("Taz" )

I trust the end-user ! :sol:

Reply

Marsh Posté le 09-06-2004 à 19:26:16    

le problème avec atoi, c'est le code d'erreur est 0 qui est aussi un int valide
 
bref atoi(chaine) == 0, c'est impossible de savoir a priori si chaine vaut 0 ou s'il y a une erreur -> strto* / sscanf

Reply

Marsh Posté le 09-06-2004 à 19:31:57    

mirascheat a écrit :

Bonjour,
Je récupère un char* grâce à la fonction strtok (qui est en fait un entier).
Puis après je veux le comparer à un entier.
Pour forcer le char* en int j'ai fait lors de ma comparaison :
if(a == (int)b)
mais ca ne semble pas marcher.
Quelqu'un pour m'aider.
Merci :-)


 
omg !  [:tortue geniale]

Reply

Marsh Posté le 09-06-2004 à 19:32:53    

vais peut-être dire un bêtise, mais scanf() prends les données sur le flux d'entrée, non ? on peut changer ça ?

Reply

Marsh Posté le 09-06-2004 à 19:39:10    

Cricri_ a écrit :

vais peut-être dire un bêtise, mais scanf() prends les données sur le flux d'entrée, non ? on peut changer ça ?


 
Utilise sscanf (Avec 2 s) ;)
Tu as aussi fscanf avec un fichier en entrée


Message édité par Vinx le 09-06-2004 à 19:51:33
Reply

Marsh Posté le 09-06-2004 à 19:40:40    

Arff ... autant pour moi, merci Vinx ;)

Reply

Marsh Posté le 10-06-2004 à 02:14:14    

Je dis ça juste comme ça mais la question doit bien etre posée à peu près 2 fois par semaine...

Reply

Marsh Posté le 29-07-2004 à 17:43:56    

tant qu'on se lasse pas de répondre 2 fois par semaine, tout va bien :)

Reply

Marsh Posté le 29-07-2004 à 17:46:17    

Taz a écrit :

le problème avec atoi, c'est le code d'erreur est 0 qui est aussi un int valide
 
bref atoi(chaine) == 0, c'est impossible de savoir a priori si chaine vaut 0 ou s'il y a une erreur -> strto* / sscanf


 
strcmp(chaine, "0" )
 
 
[:neowen]

Reply

Marsh Posté le 29-07-2004 à 18:28:23    

antp a écrit :

strcmp(chaine, "0" )
[:neowen]


Et si j'entre "00"?

Reply

Marsh Posté le 29-07-2004 à 18:32:15    

Ace17 a écrit :

Et si j'entre "00"?


 
C'était pour rire hein :o

Reply

Marsh Posté le 29-07-2004 à 18:36:59    

Ace17 a écrit :

Et si j'entre "00"?


 
ben strcmp(chaine, "00" ) !

Reply

Marsh Posté le 29-07-2004 à 18:44:28    

Kyle_Katarn a écrit :

ben strcmp(chaine, "00" ) !


 :lol:  
Alors je vais entrer "000"  :p

Reply

Marsh Posté le 29-07-2004 à 18:53:34    

Mouais effectivement dans le cas de "000" on est bien embetté...
 
Ou pourrait faire une boucle pour tester des concaténations de 0 jusqu'à strlen(chaine) ! Qu'en penses tu Taz ?

Reply

Marsh Posté le 29-07-2004 à 18:57:26    

bande de niais :o

Code :
  1. int atoi2(char *prout)
  2. {
  3. int res = atoi(prout)
  4. if (res == 0 && prout[0]!='0')
  5. {
  6. //erreur
  7. }
  8. return res;
  9. }


[:itm]

Reply

Marsh Posté le 29-07-2004 à 18:59:17    

le const bordel
et même avec ça, ça peut toujours échouer je pense, selon l'implémentation

Reply

Marsh Posté le 30-07-2004 à 09:50:34    

atoi2("0h my g0d" )
 
[:itm]


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 30-07-2004 à 10:11:34    

il suffit de rajouter un "1" devant la chaîne et voir si ça renvoie toujours 0. Dans ce cas il s'agit d'une vraie erreur. Sinon c'était une chaîne avec un ou plusieurs zéros :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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