Help : atoi... ou la convertion de char en int.

Help : atoi... ou la convertion de char en int. - C - Programmation

Marsh Posté le 17-11-2003 à 13:27:27    

Bonjour,  
 
j'ai un tableau de char dans lequel est stocké 1 chiffre par case, et j'aimerais convertir ces char en INT !
 
J'ai fais comme cela :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main (int argc, char * argv [])
  4. {
  5. int longueur_nombre1,longueur_nombre2;
  6. int val_temp,
  7. val_temp=atoi(argv[1][1]);
  8.    
  9.         printf("%i", val_temp);}


 
Or le programme plante...
 
HELP  :cry:  
 

Reply

Marsh Posté le 17-11-2003 à 13:27:27   

Reply

Marsh Posté le 17-11-2003 à 13:31:13    

%i ? C'est nouveau ?
 
bon sinon c'est du grand n'importe quoi ton truc machin

Reply

Marsh Posté le 17-11-2003 à 13:44:12    

[:xx_xx]
 
[:neowen]

Reply

Marsh Posté le 17-11-2003 à 13:46:47    

excusez moi les gars si je débute

Reply

Marsh Posté le 17-11-2003 à 13:58:59    

c'est quoi ça ?

Code :
  1. argv[1][1]


argv est un tableau de char *. donc argv[0] est le nom du programme (si je me souviens bien), argv[1] est un pointeur vers le 1er paramètre, etc...
argv[1][1] c'est n'importe quoi ! si tu veux accéder au 1er paramètre, c'est argv[1] !
de plus, "%i" ça n'existe pas, c'est "%d\n"
 
c'est du C de base quoi...


Message édité par Harkonnen le 17-11-2003 à 13:59:22
Reply

Marsh Posté le 17-11-2003 à 14:17:11    

si 1 chiffre par case alors argv[1][0]:1er chiffre, argv[1][1]:2eme chiffre etc.
en C les tableaux commencent à 0 et pas à 1!!!

Reply

Marsh Posté le 17-11-2003 à 14:25:30    

moktar1er a écrit :

si 1 chiffre par case alors argv[1][0]:1er chiffre, argv[1][1]:2eme chiffre etc.
en C les tableaux commencent à 0 et pas à 1!!!


oui ok, mais j'ai un doute sur argv[0] : c'est le nom du programme ou le 1er paramètre (il me semble que c'est le nom du programme, ou je confonds avec argc qui contient le nombre de paramètres + le nom du programme... [:meganne])


Message édité par Harkonnen le 17-11-2003 à 14:29:26
Reply

Marsh Posté le 17-11-2003 à 14:27:19    

Harkonnen a écrit :


oui ok, mais j'ai un doute sur argv[0] : c'est le nom du programme ou le 1er paramètre (il me semble que c'est le nom du programme, ou je confonds avec argc qui contient le nombre de paramètres + le nom du programme... [:meganne])


 
non non tu as raison, argv[0] c'est le nom du programme.
où je voulais intervenir c'était sur argv[1][1]; le premier 1 est sans doute OK mais sur le 2ème j'ai un doute, surtout s'il teste avec une manip du genre: "monprog.exe 5"

Reply

Marsh Posté le 17-11-2003 à 14:29:16    

Harkonnen a écrit :


oui ok, mais j'ai un doute sur argv[0] : c'est le nom du programme ou le 1er paramètre (il me semble que c'est le nom du programme, ou je confonds avec argc qui contient le nombre de paramètres + le nom du programme... [:meganne])

ça confirme ce que....
 
 
le premier, argc (argument count) est le nombre de cases dans le deuxième. La première case du deuxième (argv, argument vector) est effectivement le nom du fichier qui a été exécuté (nom de l'exécutable ou du lien symbolique vers l'exécutable).


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 17-11-2003 à 14:30:51    

moktar1er a écrit :


 
non non tu as raison, argv[0] c'est le nom du programme.
où je voulais intervenir c'était sur argv[1][1]; le premier 1 est sans doute OK mais sur le 2ème j'ai un doute, surtout s'il teste avec une manip du genre: "monprog.exe 5"


 
ben argv[1][1] ne veut rien dire, puisque argv est un tableau de chaines de caractères ! en fait, argv[1][1] sera le 2eme caractère du 1er argument

Reply

Marsh Posté le 17-11-2003 à 14:30:51   

Reply

Marsh Posté le 17-11-2003 à 14:31:43    

nraynaud a écrit :

le premier, argc (argument count) est le nombre de cases dans le deuxième. La première case du deuxième (argv, argument vector) est effectivement le nom du fichier qui a été exécuté (nom de l'exécutable ou du lien symbolique vers l'exécutable).


ben alors, j'avais raison ! argc contient bien le nombre de paramètres + le nom du programme !

Reply

Marsh Posté le 17-11-2003 à 14:33:27    

Harkonnen a écrit :


 
ben argv[1][1] ne veut rien dire, puisque argv est un tableau de chaines de caractères ! en fait, argv[1][1] sera le 2eme caractère du 1er argument


 
nous sommes d'accord très cher baron ;)
le monsieur voudrait récupérer chiffre par chiffre
donc s'il ne passe qu'un chiffre en paramètre et qu'il tape à l'indice 1 pour le lire -> crash

Reply

Marsh Posté le 17-11-2003 à 14:36:32    

moktar1er a écrit :

chiffre par chiffre


sorry j'avais mal lu sa question :D
donc effectivement, je suis OK aussi ! vu qu'il n'y a qu'un chiffre, c'est argv[1][0], sinon c'est segmentation fault :jap:

Reply

Marsh Posté le 17-11-2003 à 14:39:00    

Harkonnen a écrit :


 
ben argv[1][1] ne veut rien dire, puisque argv est un tableau de chaines de caractères ! en fait, argv[1][1] sera le 2eme caractère du 1er argument

argv[1][1] a toutes les chances de dénoter une connerie, sinon on ne se poserait pas la question (argv[1])[1] a déjà moins de chances de dénoter une connerie, bien que trouver un parsing des arguments et un accès au 2ème caractère du premier argument dans la même expression a toutes les chances de dénoter une connerie plantogène (vu que probablement personne n'a encore vérifié que la chaine avait 2 caractères, et que c'est surement pas le compilo qui va rattraper une connerie dans ce langage bugophile).


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 17-11-2003 à 14:41:03    

nraynaud a écrit :

argv[1][1] a toutes les chances de dénoter une connerie, sinon on ne se poserait pas la question (argv[1])[1] a déjà moins de chances de dénoter une connerie, bien que trouver un parsing des arguments et un accès au 2ème caractère du premier argument dans la même expression a toutes les chances de dénoter une connerie plantogène (vu que probablement personne n'a encore vérifié que la chaine avait 2 caractères, et que c'est surement pas le compilo qui va rattraper une connerie dans ce langage bugophile).


 
ce n'est pas le langage qui est bugophile, mais le programmeur...
par contre je te suis dans ton idée quant à la vérification systématique et obligatoire du nombre d'arguments passés en paramètre et de leur taille.

Reply

Marsh Posté le 20-11-2003 à 20:44:14    

non mais depuis quand vous passer un caractere a la fonction atoi qui demande un char* ? c'est normal que ca plante hein =)

Reply

Marsh Posté le 20-11-2003 à 20:50:07    

%i est tout à fait valide :o
utilise sscanf :o
pour savoir si un char est un chiffre int isdigit(int) de <ctype.h>

Reply

Marsh Posté le 21-11-2003 à 03:32:16    

Y'a aussi strtoll qui permet de faire ça bien et détectant les erreurs. atoi c'est vraiment a éviter.

Reply

Marsh Posté le 21-11-2003 à 07:56:12    

marrant ça, je viens de faire l'exercice en cours!
c'est bon à savoir qu'il y a une meilleure fonction que atoi, le jour ou on apprendra correctement en cours il va neiger des grenouilles?
et pour itoa, je suppose que c'est à éviter aussi?

Reply

Marsh Posté le 21-11-2003 à 09:32:44    

cf reponse de taz deux crans plus haut :
atoi => sscanf
itoa => s(n)printf

Reply

Marsh Posté le 21-11-2003 à 09:35:22    

chrisbk a écrit :

cf reponse de taz deux crans plus haut :
atoi => sscanf
itoa => s(n)printf


:jap:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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