Conversion nombre hexa en decimal [C] - C - Programmation
Marsh Posté le 28-10-2004 à 22:13:09
%s, pas %x.
Je laisse Taz te démonter le reste du code (de sizeof(char) à if (dans_hexa == OUI).
Marsh Posté le 28-10-2004 à 22:21:19
Ok j'ai changé mais j'ai encore un soucis.
Citation : |
Pourquoi ya un retour a la ligne en plein milieu?
Aussi non ,tan que j'y suis, est ce que le prrgramme est bien codé, au novo déclaration des variables, et est ce qu'on est tjs obligé d'allouer de la mémoire pour les char? car perso j'ai réserver 50 octets mais c pas pratique car ca depend de ce qu'on rentre en entrée.
Marsh Posté le 28-10-2004 à 22:25:36
ce que je vois surtout, c'est que DonQuichotte a du raté un truc dans 'allocation dynamique' pour coder un beau '50'
du reste manque un fflush(stdout), un const sur ton htoi
et t'es pas très cohérent dans tes tests ... relis toi avant de poster
à moins que ça soit a but didactique, utilise strtol.
t'aurais quand même pu utiliser isdigit/isxdigit/etc ..
Marsh Posté le 28-10-2004 à 22:25:55
tu recupere le '\n' avec fgets
pouquoi tu fais une alloc dynamique pour s ?
Marsh Posté le 28-10-2004 à 22:30:53
en fait, c'est variable de contrôle de boucle, c'est génial pour bien obfuscquer le tout ... alors qu'une bonne boucle while(isxdigit(s[i])) c'est tellement plus jolie ...
je dirais pas non non-plus à un while(*s) avec un break bien senti... la le nom de la var est sybilin, et il faut tracer son utilisation pour comprendre ce qu'il se passe. saloperie de pascal
Marsh Posté le 28-10-2004 à 22:31:56
Dsl mais je connnais pas toutes ces fonction: "sdigit/isxdigit/etc"
Ba en fait je fais une alloc car c le seul truc que j'ai trouvé pour que le programme marche, quand je le vire, ca plante au moment de la saisi d'un nombre.
Pour le fgets qui récupère le \n, ya pas moyen d'éviter ca?
Marsh Posté le 28-10-2004 à 22:35:59
Et pis j'aime pas le code qui fait x==OUI. Pourquoi pas plutôt (x==OUI)==OUI ?
Plus sérieusement, dégage moi ces 2 constantes OUI et NON, et teste directement "if(dans_hexa)".
Ensuite, supprime le \n que fgets te renvoie (potentiellement) en fin de chaîne.
Utilise isdigit, met un fflush stdout, déplace l'affectation "dans_hexa=1" à sa position correcte.
Et reposte ton programme pour qu'on regarde à quoi il ressemble...
Marsh Posté le 28-10-2004 à 22:44:16
Cervantes a écrit : Dsl mais je connnais pas toutes ces fonction: "sdigit/isxdigit/etc" |
on t'as demandé d'écrire un htoi, c'est un devoir ?
fgets récupère un '\n' des fois, nique le avec strchr
documente toi, notamment sur <ctype.h>
Marsh Posté le 28-10-2004 à 22:56:19
Code :
|
J'ai essay" de prendre en compte vos remarques.
Par contre je comprends pas comment niker le \n avec strchr
>>The strchr() function locates the first occurrence of c, cast to char, in the string pointed to by s. The terminating null character is considered a part of the string.<< j'ai trouvé ca sur google et je vois pas le rapport avec mon cas.
Autre chose,
Citation : |
la je veux bien, mais si je veux pas définir la taille, c possible? et pourquoi mettre un sizeof? le [100] ne définit pas déja la taille?
Marsh Posté le 28-10-2004 à 23:00:41
tu veux pas commencer à nous répondre ?
strchr t'aide à trouver l'\n'
à jamais
Marsh Posté le 28-10-2004 à 23:02:52
Alors, strchr(s, '\n') te renverra la position du retour chariot. Tu n'as qu'à mettre un 0 à la place, et hop, le tour est joué.
D'autre part, ARRETE de comparer dans_hexa à 1. C'est un peu incorrect. Il est préférable de faire z
"if (dans_exa)".
Ensuite, tu dois mettre un "fflush(stdout)" juste après ton printf, pour garantir que la ligne s'affichera à l'écran.
Ensuite, if (s[i] =0), ça me parrait louche.
Ensuite, ton code ne fonctionne pas pour les lettre ABCDEF en majuscules.
Ensuite, ton code a un fonctionnement bizarre pour
OZ12 ou 0018.
Marsh Posté le 28-10-2004 à 23:05:35
Cervantes a écrit : [cpp]
|
tu fais ce que tu veux, le jours ou tu fera autre chose que des hello world ou autre reinventage de roulette faudra pas pleurer quand ton programme plantera lamentablement parce que ta changer la taille de ton tableau en oubliant de changer le nombre magique à un endroit critique
Marsh Posté le 28-10-2004 à 23:15:11
Ba le code marchait avant quand j'avais mis:
Code :
|
donc ca voudrait dire que isxdigit ne prend en compte que les minuscules.
Pour revenir au strchr, a quoi ca va me servir d'avoir la position du retour chariot.
J'ai mis "fflush(stdout)" comme tu me le conseille mais ca change rien. Il me semle d'ailleur que mon prof m'avait dit qu'il fallait pas utiliser fflush, car defois ca a des comportements pas prévisible.
SI tu rentre 0Z12, c'est normal que ca renvoit 0 car ce n'est pas un nombre hexa.
Marsh Posté le 28-10-2004 à 23:20:23
strchr te dit ou mettre ton '\0'
et fflush() n'a rien d'imprevisible sur un flux de sortie
Marsh Posté le 28-10-2004 à 23:22:09
cricri > tu peux lui demander pourquoi il veut pas utiliser strtol ?
Marsh Posté le 28-10-2004 à 23:25:31
Etant donné que j'ai trop du mal avec ce strchr, je vais virer fgets et foute le bon vieux scanf, comme ca j'aurais pu ce '\n' qui fasse chier.
strtol>>> ca sert à rien je sais pas m'en servir
Marsh Posté le 28-10-2004 à 23:50:22
c'est surtout trop con oui. si tu sais pas lire/utiliser, c'est même pas la peine de coder ...
genre si t'es pas capable de faire un simple
Code :
|
c'est quand même vachment compliqué mais peut être pas autant que
Code :
|
allez, vas-y, dis moi que je te traite comme de la merde
Marsh Posté le 29-10-2004 à 00:24:44
Si ca peut te faire plaisir....
En tout cas juste pour dire que le C ca fait meme pas un moi que j'en fait et donc je pense pas qu'en si peu de temps je sois capable d'appliquer en 3min des fonctions que j'ai encore jamais vu. Ya plein de truc plus simple en C que je n'ai pas encore vu, donc pour les fonctions du genre stdrche, strtol... je les verrai en peu plus tard.
Maintenant ta peu etre raison, j'sui peu etre un vieux noob, mais sache que tout le monde n'a pas un cerveau aussi rapide que le tien....
Marsh Posté le 29-10-2004 à 00:32:36
ça a rien à voir. Utiliser, c'est faire un grand pas vers la compréhension. Si tu ne comprends pas comment employer strchr ou strtol, c'est qu'il te manque pas mal de bases, c'est encore un peu tôt pour aller se friter avec les pointeurs. Connaître la bibliothèque du C doit être une étape essentiel de l'apprentissage.
Marsh Posté le 29-10-2004 à 08:02:07
Cervantes a écrit : Ba le code marchait avant quand j'avais mis:
|
J'ai la flemme de regarder, mais isxdigit devrait bien marcher pour les majuscules. Le problème, c'est que dans ce cas, tu fais un truc genre chiffre_hexa = 'A' - 'a' + 10. Et ça, ça va t'envoyer dans la mouise...
Maintenant, on est quand même assez secs avec toi, mais crois-moi, on veux juste que tu prennes un certain nombre d'automatismes (ou plus exactement, on veut t'éviter de prendre de mauvaise habitudes). Donc c'est un peu plus pénible au début, mais ça te servira au long terme. Ca vaut le coup de faire un ptit effort au début, de lire les docs des fonctions que l'on te donne, et tu verras...
Marsh Posté le 28-10-2004 à 22:06:17
Slt, voici le code
Voici ce que j'ai en retour:
Saisir un nombre hexadÚcimal: 0xaa
Le nombre hexa 3d2498 vaut 170
Appuyez sur une touche pour continuer...
3d2498 >> y vient de ou ce nombre????