Récupérer un nombre dans un char en c

Récupérer un nombre dans un char en c - C - Programmation

Marsh Posté le 29-11-2008 à 16:08:59    

Bonjour,  
je suis en train de créer un client/serveur en c sous windows xp et je voudrais que le client entre de numéro de port dans argv[].  
g reussi a recuperer l'ip mais le port sa marche pas.  
voila un le bout de code coserné:  
 
//*********************************************************  
int main(int argc, char **argv)  
{  
const char *ip;  
int i;  
int port;  
 
for(i = 0; i < argc; i++)  
{  
 
if(strcmp(argv[i],"-ip" )==0)  
{  
 
ip = argv[i + 1];  
 
}  
 
if(strcmp(argv[i],"-port" )==0)  
{  
 
port = argv[i + 1];  
 
}  
}  
}  
 
//*************************************************  
 
je c'est que c'est normale que sa marche pas mais auriez vous une idée pour convertire un char en int.  
exmple :  
char *port_char;  
int port_int = port_char;  
 
merci davance pour vos reponce a ++.

Reply

Marsh Posté le 29-11-2008 à 16:08:59   

Reply

Marsh Posté le 29-11-2008 à 17:23:09    

strtol

Reply

Marsh Posté le 17-12-2008 à 12:15:37    

int convert(char *s)
{
  int i = 0, n = 0, signe = 0;
  while (s[i] == ' ' || s[i] == '\n' || s[i] == '\t')
     i += 1;
  signe = 1;
  if (s[i] == '+' || s[i] == '-')
     signe = (s[i++] == '+') ? 1 : -1;
  while (s[i] >= '0' && s[i] <= '9')
    {
      n = 10 * n + s[i] - '0';
      i++;
    }
 return (signe * n);  
}


Message édité par Mxtrem le 17-12-2008 à 12:21:25
Reply

Marsh Posté le 17-12-2008 à 12:17:10    

i n'est pas initialisé
 
génial ton code pourri.

Reply

Marsh Posté le 17-12-2008 à 12:18:47    

Taz a écrit :

i n'est pas initialisé
 
génial ton code pourri.


 
 
i n'est pas initialisé ? Hum, achète des yeux ?
Oups edit, en effet ça risque de mieux marcher maintenant.
Sinon je ne vois pas en quoi le code est pourri... Tu peux faire mieux ?

Message cité 1 fois
Message édité par Mxtrem le 17-12-2008 à 12:22:03
Reply

Marsh Posté le 17-12-2008 à 12:27:14    

Mxtrem a écrit :


 
 
i n'est pas initialisé ? Hum, achète des yeux ?
Oups edit, en effet ça risque de mieux marcher maintenant.
Sinon je ne vois pas en quoi le code est pourri... Tu peux faire mieux ?


Message édité par Mxtrem le 17-12-2008 à 12:21:25
 
parce que c'est du NIH même pas testé. C'est vraiment de l'enculage de mouche de vouloir pisser du code NIH. Ca fait 30ans qu'on a des trucs à réutiliser, mais non, NIH.
thedailyWTF a encore de beaux siècles devant lui.

Reply

Marsh Posté le 17-12-2008 à 14:35:27    

Taz a écrit :


Message édité par Mxtrem le 17-12-2008 à 12:21:25
 
parce que c'est du NIH même pas testé. C'est vraiment de l'enculage de mouche de vouloir pisser du code NIH. Ca fait 30ans qu'on a des trucs à réutiliser, mais non, NIH.
thedailyWTF a encore de beaux siècles devant lui.


 
Cool t'as pas l'air aigri comme mec :ouch:  
Déjà je ne sais pas ce que veulent dire NIH et thedailyWTF, secondo, je lui ai codé ça à la va-vite sans tester.
Finalement, je viens de tester, ça marche, ça lui montre de conversion d'un char en int. Putain, c'est cool de vouloir rendre service... on se fait insulter.

Reply

Marsh Posté le 17-12-2008 à 16:52:06    

dyroj a écrit :

Bonjour,  
je suis en train de créer un client/serveur en c sous windows xp et je voudrais que le client entre de numéro de port dans argv[].  
g reussi a recuperer l'ip mais le port sa marche pas.  
voila un le bout de code coserné:  
 
//*********************************************************  
int main(int argc, char **argv)  
{  
const char *ip;  
int i;  
int port;  
 
for(i = 0; i < argc; i++)  
{  
 
if(strcmp(argv[i],"-ip" )==0)  
{  
 
ip = argv[i + 1];  
 
}  
 
if(strcmp(argv[i],"-port" )==0)  
{  
 
port = argv[i + 1];  
 
}  
}  
}  
 
//*************************************************  
 
je c'est que c'est normale que sa marche pas mais auriez vous une idée pour convertire un char en int.  
exmple :  
char *port_char;  
int port_int = port_char;  
 
merci davance pour vos reponce a ++.


 
Déjà pour gérer les options "-port" ou "-ip", tu peux utiliser getopts. Ca gère le cas
-x
-y
-xy
 
et aussi les options avec valeur style
-x12 -y15
 
Mais les conventions demandent qu'une option longue soit précédée d'un double tiret "--port" par exemple
 
Ensuite, pour convertir une chaine style "123" en nombre 123, tu peux utiliser des outils déjà existants style strtoul ou te faire ton propre outils
val=0
pour i balayant la chaine
faire
    val=val * 10 + code ascii de i - code ascii '0'
fin faire
Mais c'est mieux d'utiliser des outils déjà existants
 
De plus si le nombre entré est le n° de port, tu devras le convertir via htons avant de t'en servir sinon ton serveur risque de ne pas communiquer du tout.  
Et enfin c'est bizarre un client serveur avec un port entré par l'utilisateur car tu risques de créer des collisions avec des appli utilisant déjà le n° entré (imagine que ton utilisateur choisisse 21 ou 23  :bounce: ) mais c'est toi que ça regarde...
 
 

Mxtrem a écrit :


 
Cool t'as pas l'air aigri comme mec :ouch:  
Déjà je ne sais pas ce que veulent dire NIH et thedailyWTF, secondo, je lui ai codé ça à la va-vite sans tester.
Finalement, je viens de tester, ça marche, ça lui montre de conversion d'un char en int. Putain, c'est cool de vouloir rendre service... on se fait insulter.


Bah faut t'y faire. Taz est extrèmement brillant (ou du moins il semble l'être) mais il n'a jamais su et ne saura jamais se mettre au niveau de ses interlocuteurs. Ca fait plusieurs années qu'il sévit ici et on fait avec...


Message édité par Sve@r le 17-12-2008 à 16:54:51

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

Marsh Posté le 17-12-2008 à 16:58:11    

Taz a écrit :


génial ton code pourri.


Traduction pour Mxtrem:
Tu proposes un code bancal pour quelque chose qui existe déjà.
exemple que donne ton code si s==NULL?


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 17-12-2008 à 20:00:58    

Mxtrem a écrit :


Cool t'as pas l'air aigri comme mec :ouch:  
Déjà je ne sais pas ce que veulent dire NIH et thedailyWTF, secondo, je lui ai codé ça à la va-vite sans tester.
Finalement, je viens de tester, ça marche, ça lui montre de conversion d'un char en int. Putain, c'est cool de vouloir rendre service... on se fait insulter.


 
Tu rends pas service du tout, puisque la réponse avait déjà été donnée et que ton code est pourri.
 
Pour rappel, la réponse était : strtol

Reply

Marsh Posté le 17-12-2008 à 20:00:58   

Reply

Marsh Posté le 17-12-2008 à 23:53:52    

Elmoricq a écrit :


 
Tu rends pas service du tout, puisque la réponse avait déjà été donnée et que ton code est pourri.
 
Pour rappel, la réponse était : strtol


 
Mon code est pourri mais à le mérite (une fois de plus) de fonctionner.
Il n'est certainement pas à la hauteur des fonctions de la lib c mais permet de comprendre le mécanisme de conversion d'un char en int, rien de plus.
Je suis certain qu'il y en a beaucoup qui connaissent le fonctionnement de strtol mais qui s'avèreraient par exemple incapable de réaliser une petite fonction qui converti un nombre en n'importe quelle base...
Enfin bref, on ne va pas polémiquer, vous êtes les meilleurs :o Utilisez ce que vous savez mais ne réflechissez pas, c'est tellement plus simple.

Reply

Marsh Posté le 18-12-2008 à 00:05:05    

Mxtrem a écrit :

Utilisez ce que vous savez mais ne réflechissez pas, c'est tellement plus simple.


T'as pas l'air de réfléchir beaucoup non plus vu le code que tu ponds et la manière dont tu réagis à la critique :(


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 18-12-2008 à 02:02:08    

masklinn a écrit :


T'as pas l'air de réfléchir beaucoup non plus vu le code que tu ponds et la manière dont tu réagis à la critique :(


 
En même temps vu le ton sur lequel la critique est formulée ...

Message cité 2 fois
Message édité par Anonymouse le 18-12-2008 à 02:11:38
Reply

Marsh Posté le 18-12-2008 à 08:20:39    

Anonymouse a écrit :

 

En même temps vu le ton sur lequel la critique est formulée ...


Ce n'est pas faux.
Mais bon ça ressemble à une tradition ici. Cela dit, ce n'est pas pour ça qu'il faut prendre la mouche. Les gens qui critiquent comme cela n'hésiteront cependant pas à t'aider si besoin est. (vécu).

 


edit: un code pourri mais qui fonctionne reste un code pourri et est à bannir. La question n'était pas comment réaliser un algo qui convertit un char en int mais comment convertir un char en int. La réponse est strtol.

Message cité 1 fois
Message édité par ptitchep le 18-12-2008 à 08:26:39

---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 18-12-2008 à 09:53:13    

ptitchep a écrit :


Ce n'est pas faux.
Mais bon ça ressemble à une tradition ici. Cela dit, ce n'est pas pour ça qu'il faut prendre la mouche. Les gens qui critiquent comme cela n'hésiteront cependant pas à t'aider si besoin est. (vécu).
 
edit: un code pourri mais qui fonctionne reste un code pourri et est à bannir. La question n'était pas comment réaliser un algo qui convertit un char en int mais comment convertir un char en int. La réponse est strtol.


 
Non mis c'est une tradition sur HFr comme sur développez.  
 
Certains forumeurs, qui se considèrent comme gourous de la programmation, prennent un malin plaisir à casser la personne qui pose une question en étalant bien leurs connaissances sur un ton, parfois pédant, avant de donner la réponse. Autant donner la réponse et indiquer les différents points d'erreurs sans rabaisser la personne pour augmenter son propre égo.
 

Reply

Marsh Posté le 18-12-2008 à 11:46:25    

La personne cassée n'est pas celle qui a posé la question mais celle qui veut y répondre alors qu'une réponse pertinente à déjà été donnée. Et vu la date du post, à mon avis, dyroj a déjà utilisé strtol.
En plus dire à quelqu'un que son code est pourri ne veut pas dire que l'on se prend pour un gourou. Même si évidemment ce n'est pas d'une politesse exemplaire.
En effet ajouter le pourquoi en dessous de "génial ton code pourri" ça serait bien.


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 18-12-2008 à 12:38:26    

Anonymouse a écrit :

En même temps vu le ton sur lequel la critique est formulée ...


Je me suis mangé des réponses de Taz quand je suis arrivé sur HFR, j'ai foutu ma fierté dans ma poche, j'ai ramassé mes dents et j'ai compris qu'il avait à peu près toujours raison [:spamafote]

Anonymouse a écrit :

Certains forumeurs, qui se considèrent comme gourous de la programmation, prennent un malin plaisir à casser la personne qui pose une question en étalant bien leurs connaissances sur un ton, parfois pédant, avant de donner la réponse. Autant donner la réponse et indiquer les différents points d'erreurs sans rabaisser la personne pour augmenter son propre égo.
 


En l'occurence Taz a fait exactement l'inverse là, il a d'abord formulé la critique constructive avant de donner un jugement de valeur sur la qualité du code [:dawa]

Message cité 1 fois
Message édité par masklinn le 18-12-2008 à 12:38:45

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 18-12-2008 à 19:01:05    

masklinn a écrit :


Je me suis mangé des réponses de Taz quand je suis arrivé sur HFR, j'ai foutu ma fierté dans ma poche, j'ai ramassé mes dents et j'ai compris qu'il avait à peu près toujours raison [:spamafote]  


 

masklinn a écrit :


En l'occurence Taz a fait exactement l'inverse là, il a d'abord formulé la critique constructive avant de donner un jugement de valeur sur la qualité du code [:dawa]


 

Taz a écrit :

i n'est pas initialisé  
génial ton code pourri.


 
Bah le jugement de valeur il pouvait le garder ou le formuler autrement.


Message édité par Anonymouse le 18-12-2008 à 19:01:30
Reply

Marsh Posté le 18-12-2008 à 19:17:58    

Mince, on n'a plus le droit de dire qu'un code est pourri ?
 
Désolé, mais ce n'est pas un jugement de valeur ici, c'est un avis objectif.

Reply

Marsh Posté le 18-12-2008 à 19:36:37    

Elmoricq a écrit :

Désolé, mais ce n'est pas un jugement de valeur ici, c'est un avis objectif


Faux, on pourrait aussi dire que c'est pas mal pour un enfant de 8 ans, ou qu'il faut bien commencer quelque part après tout [:classe++]


Message édité par masklinn le 18-12-2008 à 19:39:31

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 18-12-2008 à 19:42:09    

rooooooooooooo
c'est méchant
et gratuit
j'adore


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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