[C]Extraire un chiffre d'un tableau de char dans un int

Extraire un chiffre d'un tableau de char dans un int [C] - C - Programmation

Marsh Posté le 02-08-2012 à 10:50:39    

Bonjour !
je me remet au C après quelques années de vide afin de résoudre les problème de Project Euler (http://projecteuler.net/)  
Peut être que certain connaissent, enfin toujours est-il que j'ai besoin de convertir un nombre stocké dans un tableau de char en int, et je ne trouve pas de fonctions qui le fasse  :sweat:  
 
un exemple vous parlera plus :
 
char test[]="123456789";
int chiffre=test[2];
printf("Le troisieme chiffre est %d,"chiffre);
 
(l'exemple et inutile mais illustre le principe)
Ca ne plante pas à la compilation, mais quand je lance le programme, ça ne m'affiche pas "Le troisieme chiffre est 3" mais un autre nombre qui n'a rien à voir ?
 
Une explication ? Une solution ?
 
Merci !

Reply

Marsh Posté le 02-08-2012 à 10:50:39   

Reply

Marsh Posté le 02-08-2012 à 10:58:44    

Bonjour, je pense que la fonction "atoi" fairait l'affaire.
 

Citation :

#include <stdlib.h>
int atoi( const char *str );
 
 


Message édité par Profil supprimé le 02-08-2012 à 10:59:49
Reply

Marsh Posté le 02-08-2012 à 11:02:21    

error: invalid conversion from 'const char' to 'const char*'
 initializing argument 1 of 'int atoi(const char*)'
 
J'avais deja essayé cette fonction, apparement ça ne fonctionne que pour la conversion du char tout entier dans un int :/

Reply

Marsh Posté le 02-08-2012 à 11:05:05    

brikdelay a écrit :

error: invalid conversion from 'const char' to 'const char*'
 initializing argument 1 of 'int atoi(const char*)'
 
J'avais deja essayé cette fonction, apparement ça ne fonctionne que pour la conversion du char tout entier dans un int :/


 
Relis la doc, tu t'es planté dans ton utilisation d'atoi, visiblement. Tu ne dois pas déréférencer le tableau que tu passes en paramètre.
 
Edit : My Bad. Pour ton cas, tu peux t'en sortir avec un int chiffre = test[2] - '0'; C'est pas super élégant, mais ca passera sans doute.
 
Edit 2 : l'autre solution serait d'extraire la sous-chaine qui t'intéresse (à coup de strstr) et d'utiliser atoi.


Message édité par theshockwave le 02-08-2012 à 11:07:37

---------------
last.fm
Reply

Marsh Posté le 02-08-2012 à 11:05:30    

Pour passer l'adresse de ton tableau de char, je crois qu'il faut le préfixer d'un '&'.
 

Code :
  1. char test[]="123456789";
  2. int chiffre=atoi(&test);
  3. printf("Le nombre test est %d",chiffre);

Reply

Marsh Posté le 02-08-2012 à 11:09:05    


 
non, c'est faux. Un tableau est castable automatiquement en pointeur sans utiliser d'opérateur.
 
Ce qu'il veut en fait, c'est juste le chiffre à un index de la chaine et non pas le nombre représenté par la chaine.


---------------
last.fm
Reply

Marsh Posté le 02-08-2012 à 11:11:44    

theshockwave a écrit :


 
non, c'est faux. Un tableau est castable automatiquement en pointeur sans utiliser d'opérateur.
 
Ce qu'il veut en fait, c'est juste le chiffre à un index de la chaine et non pas le nombre représenté par la chaine.


 
Il a dit "nombre".  :o  
 
Si non, la soustraction d'une valeur relative à la table ascii est possible. En effet.

Reply

Marsh Posté le 02-08-2012 à 11:19:24    

En effet, ajouter -'0' fonctionne.
C'est moche mais ça marche, merci !
 

Citation :

Il a dit "nombre".  :o  


ouais mais la variable s'appelle "chiffre", jsui a moitié pardonnée :o

Reply

Sujets relatifs:

Leave a Replay

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