Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1341 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Probleme de conversion char -> int

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Probleme de conversion char -> int

n°882999
mcyrb
Mieux vaut tard que plus tard
Posté le 26-10-2004 à 13:08:06  profilanswer
 

Bonjour, j'ai vu que mon probleme avait déja été évoqué dans plusieurs sujets, mais le probleme est que je débute en C et que lorsque j'entends parler de atoi, strtol, sscanf, etc... ben je ne comprends pas grand chose et je sais d'autant moins comment utiliser ces fonctions.
 
J'avais entendu parler (grace a mon ami Google :hello: ) de itoa() pour passer de int à char et de atoi() pour passer de char à int. Je les ai donc utilisés dans mon prog, et en foutant des printf() un peu partout dans mon programme je me suis rendu compte que c'est l'emploi de atoi() que j'ai fait qui fait que ca ne fonctionne pas correctement (itoa lui fait bien son boulot ;) ).
 
Voici la partie de mon code qui me pose probleme:

Code :
  1. int k,m,o,u,r;// Petit rappel de ma declaration de variables
  2. CH3 nb;// CH3 est défini par "typedef char CH3[4];"
  3.     r=m+3*o+3*u+r;
  4.     printf("\nr_initial=%d\n",r);// A supprimer
  5.     while(r>9)
  6.     {
  7.         itoa(r,nb,10);
  8.         printf("Selon itoa, r=%s\n",nb);// A supprimer
  9.         for(k=0,o=0;nb[k]!='\0';k=k+1)
  10.         {
  11.             r=atoi(&nb[k]);
  12.             printf("Selon atoi, r[%d]=%d\n",k,r);// A supprimer
  13.             system("pause" );// A supprimer
  14.             o=o+r;
  15.         }   
  16.         r=o;
  17.     }
  18.     printf("r_final=%d\n",r);// A supprimer


 
En gros,le but de cette partie c'est d'additionner les chiffres du nombre en entrée jusquà ce qu'il n'y ait plus qu'un seul chiffre.
(Par exemple si j'ai r=329 entrée, je veux r=3+2+9=14 puis r=1+4=5 en sortie).
Les lignes commentées par "A supprimer" sont mes printf de test.
Je n'ai pas encore vu les pointeurs en cours, donc si vous me parlez de "char*" ou qqch dans le genre je risque de ne pas tout suivre (c'est dur d'etre en face de qqn qui y connait rien  :D )
 
Mon probleme avec est que si par exemple j'ai 329 en entrée (donc nb="329" ), j'obtiens nb[0]=329, nb[1]=29, nb[2]=9 au lieu de nb[0]=3, nb[1]=2, nb[2]=9 (ce que j'aurais souhaité).
 
Merci d'avance pour vos réponses (pas trop complexes pour mon niveau de préférence  :hello: )


Message édité par mcyrb le 26-10-2004 à 13:13:03
mood
Publicité
Posté le 26-10-2004 à 13:08:06  profilanswer
 

n°883000
Taz
bisounours-codeur
Posté le 26-10-2004 à 13:11:29  profilanswer
 

allez laisse béton, t'as rien compris aux pointeurs ni à rien
 
utilise strtol, atoi est déprécié. itoa n'existe pas. regarde aussi sscanf

n°883004
mcyrb
Mieux vaut tard que plus tard
Posté le 26-10-2004 à 13:15:01  profilanswer
 

Taz a écrit :

allez laisse béton, t'as rien compris aux pointeurs ni à rien
 
utilise strtol, atoi est déprécié. itoa n'existe pas. regarde aussi sscanf


 
J'ai déja dit que j'avais pas encore vu les pointeurs donc je risque pas de les comprendre. Et j'ai dit aussi que j'aais déja entendu parler ce que tu dis mais c'est pas en m'enoncant ce que j'ai déja lu qu je v obtenir les information dont j'ai besoin.
 
Et si itoa n'existe pas comment ca se fait qu'il marche ?  :??:  
 
Merci pour ta réponse et ton amabilité  :jap:


Message édité par mcyrb le 26-10-2004 à 13:16:08
n°883013
Lam's
Profil: bas.
Posté le 26-10-2004 à 13:29:29  profilanswer
 

mcyrb a écrit :

itoa() pour passer de int à char et de atoi() pour passer de char à int.


 
Bah non justement, ça passe de char * à int. Un char * est un pointeur.  
A ton niveau, on peut considérer qu'une chaîne de caractères, un tableau et un pointeur, ça correspond à la même chose: l'endroit où commence une séquence de caractères.
 
La façon que les fonctions standard du C utilisent pour savoir combient de caractères il y a dans une chaîne, c'est de la terminer par 0. Donc, ta chaîne fait {'3', '2', '9', 0}, où '3' est le caractère correspondant à 3, etc.
 
En faisant un atoi, tu indiques comme un grand où se trouve le début de ta chaîne, mais la fin reste la même: atoi s'arrete au premier 0 rencontré. Donc 329, puis 29, puis 9...
 
Pour convertir un caractère en chiffre, tu n'as qu'à remplacer :  
          r=atoi(&nb[k]);
par:
          r=nb[k]-'0';
 
Mais de toutes façons, ce n'est pas une bonne façon de faire ton exercice. Il serait plus rationnel de ne travailler que sur les entiers, sans passer par les chaîne au passage (en divisant pas 10, et en récupérant le reste, via modulo).
 
Ca devrait suffir pour commencer...


Message édité par Lam's le 26-10-2004 à 13:32:29
n°883014
Taz
bisounours-codeur
Posté le 26-10-2004 à 13:30:43  profilanswer
 

tu veux quoi ? y a toute une batterie de fonction pour faire le boulot, c'est pas suffisant ?
 
 
itoa, c'est pas standard, ça dépend de ta plateforme. Alors fais sans, surtout qu'itoa a bien d'autre problème.

n°883018
Lam's
Profil: bas.
Posté le 26-10-2004 à 13:34:47  profilanswer
 

Taz a écrit :

tu veux quoi ? y a toute une batterie de fonction pour faire le boulot, c'est pas suffisant ?
 
 
itoa, c'est pas standard, ça dépend de ta plateforme. Alors fais sans, surtout qu'itoa a bien d'autre problème.


Taz, il débute...
 
Tu vas pas lui demander de se farcir le standard C alors qu'il ne sait même pas c'est quoi un pointeur.
 
Laisse le se planter, apprendre de ses erreurs, et dans quelques mois, on pourra commencer à lui taper sur les doigts parce que son code est du bricolage. Mais là, c'est prématuré.

n°883022
cris56
Posté le 26-10-2004 à 13:38:41  profilanswer
 

ben pour debuter, autant apprendre directement *printf/*scanf ?

n°883023
Lam's
Profil: bas.
Posté le 26-10-2004 à 13:44:03  profilanswer
 

cris56 a écrit :

ben pour debuter, autant apprendre directement *printf/*scanf ?


On en a déja parlé il y a pas longtemps (dans le fameux topic sur size_t): les e/s, c'est complexe comme sujet. Taille mémoires, passage de paramètres par pointeurs, flush des e/s, comportement de \n, protection contre le garbage, façon que scanf a de faire sa tokenization, etc. Et bien sûr, l'utilisation de size_t :)
 
Même si le premier programme c'est généralement "Hello World", c'est pas franchement le meilleur sujet pour démarrer... Il vaut mieux jouer à de l'arithmétique et des structures de controles simples pour commencer. Et je pense que c'est là le sujet de l'exercice de mcyrb.
 

n°883234
mcyrb
Mieux vaut tard que plus tard
Posté le 26-10-2004 à 17:11:37  profilanswer
 

Lam's a écrit :


Pour convertir un caractère en chiffre, tu n'as qu'à remplacer :  
          r=atoi(&nb[k]);
par:
          r=nb[k]-'0';
 
Mais de toutes façons, ce n'est pas une bonne façon de faire ton exercice. Il serait plus rationnel de ne travailler que sur les entiers, sans passer par les chaîne au passage (en divisant pas 10, et en récupérant le reste, via modulo).
 
Ca devrait suffir pour commencer...


 
Merci beaucoup pour ta reponse  :)

n°883403
Attilagab
Posté le 26-10-2004 à 20:04:29  profilanswer
 

bravo bravo
 
simple lecteur anonyme de ce forum
débutant moi même en c
 
je constate une chose : l'absolu nulité de certains, Taz en tête jusque là
 
Taz > tu es peut être extrèmement bon, voir un génie dans ton domaine, mais tu es nul
très nul
déjà pour commencer apprend à lire, relis le premier post
Vous avez une règle ici qui prévaut sur tout : on aide à partir des efforts fournis par ceux qui le demandent.
Toi tu es sec, tes réponses sont courtes voir méprisantes (à ton image?). Et ceci très souvent voir tout le temps.
mcyrb indique la base de son parcours : noob en c, il a effectué des recherches, peut être mal, mais il a fait l'effort, donc la moindre des choses c'est être relax  ET pédagogue.
 
mcyrb > parceque je débute moi aussi je me suis donné un champs restrictif d'apprentissage, bon ou mauvais qui sait, regarde ce que tu peux trouver sur l'ansi-C et les fonctions et bibliothèques fournies avec, et pourquoi la plus part prêche par le standard à raison.
cherche sur http://fr.wikipedia.org/  
=> Bibliothèque C ANSI
=> langage C
regarde sur www.developpez.com il y a des tutos assez interessant (il faut bien commencer quelque part)
 
à partir de là tu verras que bien des choses semblent très interessantes dans la glibc que je te laisse chercher aussi.


Message édité par Attilagab le 26-10-2004 à 20:10:35
mood
Publicité
Posté le 26-10-2004 à 20:04:29  profilanswer
 

n°883420
Taz
bisounours-codeur
Posté le 26-10-2004 à 20:20:32  profilanswer
 

attilagab a écrit :


Toi tu es sec, tes réponses sont courtes

un bon rapport signal/bruit en somme  

attilagab a écrit :


méprisantes (à ton image?).

je te méprises pour ce genre de réflexion.

n°883422
Attilagab
Posté le 26-10-2004 à 20:23:49  profilanswer
 

Taz a écrit :

 
je te méprises pour ce genre de réflexion.


 
facil à titiller, bien
du moment que ton discourt s'arrange

n°883619
JFK99
Posté le 27-10-2004 à 01:19:01  profilanswer
 

ca m'excite tout ca


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Probleme de conversion char -> int

 

Sujets relatifs
Problème de transfert de Paradox vers MSSQLProbleme avec une requête
Probleme de complilation[XML] Problème de XPath
Problème Champ CalculéDelphi : transtypage Interger -> Char : ??
VBScript || Probleme de variable et chaine de caractereprobleme avec php/mysql
probleme erreur Undefined offset variables de sessionprobleme de layout dans un panel
Plus de sujets relatifs à : [C] Probleme de conversion char -> int


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR