Récupérer un nombre dans un char en c - C - Programmation
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);
}
Marsh Posté le 17-12-2008 à 12:17:10
ReplyMarsh Posté le 17-12-2008 à 12:18:47
Taz a écrit : i n'est pas initialisé |
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 ?
Marsh Posté le 17-12-2008 à 12:27:14
Mxtrem 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.
Marsh Posté le 17-12-2008 à 14:35:27
Taz a écrit : |
Cool t'as pas l'air aigri comme mec
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.
Marsh Posté le 17-12-2008 à 16:52:06
dyroj a écrit : Bonjour, |
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 ) mais c'est toi que ça regarde...
Mxtrem a écrit : |
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...
Marsh Posté le 17-12-2008 à 16:58:11
Taz a écrit : |
Traduction pour Mxtrem:
Tu proposes un code bancal pour quelque chose qui existe déjà.
exemple que donne ton code si s==NULL?
Marsh Posté le 17-12-2008 à 20:00:58
Mxtrem 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
Marsh Posté le 17-12-2008 à 23:53:52
Elmoricq a écrit : |
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 Utilisez ce que vous savez mais ne réflechissez pas, c'est tellement plus simple.
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
Marsh Posté le 18-12-2008 à 02:02:08
masklinn a écrit : |
En même temps vu le ton sur lequel la critique est formulée ...
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.
Marsh Posté le 18-12-2008 à 09:53:13
ptitchep a écrit : |
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.
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.
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
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
Marsh Posté le 18-12-2008 à 19:01:05
masklinn a écrit : |
masklinn a écrit : |
Taz a écrit : i n'est pas initialisé |
Bah le jugement de valeur il pouvait le garder ou le formuler autrement.
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.
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
Marsh Posté le 18-12-2008 à 19:42:09
rooooooooooooo
c'est méchant
et gratuit
j'adore
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 ++.