récupérer des entiers depuis un paramètre de la fonction main - C - Programmation
Marsh Posté le 28-09-2005 à 13:12:20
treolar a écrit : Dans argv[1], on récupère le premier paramètre passé au programme en ligne de commande. |
strtol() (entier signé) ou strtoul() (entier non signé) en passant la bonne adresse de départ.
Fait de ton mieux et poste ton code.
Marsh Posté le 28-09-2005 à 13:22:14
treolar a écrit : Bonjour, |
La fonction "strstr()" permet d'extraire des sous-chaînes de chaînes. Mais c'est une fonction lourde.
Si tu es certain certain que
1) la chaîne commence par "toto" (4 caractères)
2) xx fait bien et fera toujours 2 caractères
3) yyy en fera toujours 3 et se trouve en 8° position
Alors tu peux utiliser directement "strtoul()" qui converti une chaîne en nombre
Code :
|
Evidemment, c'est pas franchement joli joli. Si jamais ta chaîne entrante change de format, tu dois reprogrammer pas mal de choses => c'est pas un code "propre" mais qui fonctionne dans ce cas précis.
Si maintenant tu veux un code plus adaptable aux données entrantes, alors cela devient un peu plus compliqué
Marsh Posté le 28-09-2005 à 13:35:06
Ok dac, c'est ce que je recherchais, j'ai la un bon exemple pour essayer maintenant, de faire plus compliqué. Par exemple dans le cas où n et m n'ont pas toujours 2 et 3 caractères...
En tout cas, merci bien pour votre spontanéité !
Je reviendrais poster ce que j'aurai fait...
Marsh Posté le 28-09-2005 à 13:48:05
c'est quoi ce strtoul sans verif de resultat la ?
ah ué nan, j'ai rien dit, enfin si un peu, mais bon
Marsh Posté le 28-09-2005 à 13:56:50
Sve@r a écrit :
|
Pourquoi unsigned short, alors que strtoul() retourne un unsigned long ?
Marsh Posté le 28-09-2005 à 15:15:31
Emmanuel Delahaye a écrit : Pourquoi unsigned short, alors que strtoul() retourne un unsigned long ? |
En fait, je crois que la bonne question serait "pourquoi strtoul alors que les variables sont en unsigned short ?"
Ce qui m'amène à ma première réponse : parce que "strtous" n'existe pas...
En fait, étant donné que "xx" et "yyy" de par la description qui en a été faite sont des entiers variant de "00" à "999", ils sont forcéments positifs et leur plage de valeur peut tenir sur un short d'où le "unsigned short".
Maintenant, "strtoul" ramène effectivement un "unsigned long" mais il sera transformé de façon implicite en "unsigned short". Certes, il y aura troncature de 2 octets mais ces octets étant toujours remplis de "0" non significatifs, il n'y aura aucune perte de valeur.
Marsh Posté le 28-09-2005 à 23:21:11
si jamais le nom du fichier est de la forme toto-1_450.dat , ton strtoul va prendre un négatif ( c un exemple ), 'fin si on peut _vraiment_ faire confiance a l'input ca va, sinon les résultats sur un tableau vont être franchement joyeux ^^
Marsh Posté le 29-09-2005 à 07:01:36
Et puis, bon, je me demande si l'économie réalisée par l'utilisation de short au lieu de long est significative.
Marsh Posté le 29-09-2005 à 08:42:30
Elmoricq a écrit : Et puis, bon, je me demande si l'économie réalisée par l'utilisation de short au lieu de long est significative. |
Probablement pas, surtout qu'il est possible que ça rajoute du code de conversion...
Marsh Posté le 29-09-2005 à 08:53:10
bha sur une plateforme 16bits, surement que si
( C'est peut-être l'avantage de certains types C99 qui sont plus explicites pour éviter le doute, t'as besoin du type le plus rapide d'au moins 16bits non signé : uintfast16_t )
( je dis peut-être, j'ai jamais eu l'occasion de tester le C99 et de voir si c'etait bien utile )
Marsh Posté le 29-09-2005 à 09:04:18
ouais la vous fourrez des mouches par la face sud, hein ?
Marsh Posté le 29-09-2005 à 09:08:42
je sais que ca existe, jme demandais juste si ca pouvait servir a kkchose...
( comme 2-3 autres truc en C99 ^^ )
Marsh Posté le 28-09-2005 à 13:01:39
Bonjour,
Le prototype de la fonction main est comme suit :
int main(int argc, char* argv[])
Dans argv[1], on récupère le premier paramètre passé au programme en ligne de commande.
C'est une chaine de caractères qui aura toujours la forme :
totoxx_yyy.dat
(ex: toto12_250.dat)
Je voudrais récupérer dans deux entiers n et m, les valeurs de xx et yyy.
Merci pour votre aide.
Je suis débutant en prog, une simple piste pourrait déjà m'aider grandement...
Je suppose qu'il doit exister des fontions pour se déplacer dans la chaine de caractères et récupérer les caractères, puis les convertir en entier ?