[C] conversion de types
Résolu/Fermé
Nathalie
-
18 sept. 2006 à 14:36
mamiemando Messages postés 33665 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 mai 2025 - 18 sept. 2006 à 23:43
mamiemando Messages postés 33665 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 mai 2025 - 18 sept. 2006 à 23:43
A voir également:
- [C] conversion de types
- Logiciel gratuit conversion calendrier républicain - Télécharger - Études & Formations
- Types de souris informatique - Guide
- Les types de ram - Guide
- Monnaie conversion - Télécharger - Banque & Budget
- Conversion bytes en mo ✓ - Forum Programmation
5 réponses
mamiemando
Messages postés
33665
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
14 mai 2025
7 850
18 sept. 2006 à 17:28
18 sept. 2006 à 17:28
Ben c'est pas trop dans l'optique, normalement ton utilisateur est sensé utilisé le '.' du pavé numérique, ce n'est pas à toi programmeuse de gérer ça. Si vraiment tu veux convertir ce qu'il a tapé :
1) stocke sa saisie dans une chaîne (char *)
2) change l'éventuelle virgule par un point
3) utilise la commande atof
http://unixhelp.ed.ac.uk/CGI/man-cgi?atof+3
1) stocke sa saisie dans une chaîne (char *)
2) change l'éventuelle virgule par un point
3) utilise la commande atof
http://unixhelp.ed.ac.uk/CGI/man-cgi?atof+3
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ // chaine dans laquelle on stocke la saisie char *buffer = (char *)malloc(255*sizeof(char)); double d; unsigned int len=0,i; // (1) printf("val ? "); scanf("%s",buffer); // (2) len = strlen(buffer); for(i=0;i<len;++i){ if(buffer[i]==',') buffer[i]='.'; } // (3) d = atof(buffer); free(buffer); // libérer le tampon printf("double = %lf\n",d); // afficher le double getchar(); // appuyer sur entrée pour finir le programme return 0; }
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
18 sept. 2006 à 17:37
18 sept. 2006 à 17:37
Salut
Tu peut voir du coté de locale.h
en effet, en fesant setlocale("French",ALL)
tu défini les paramètres locaux au français. les lfottants sont alors affichés avec des virgules en utilisant printf.
je n'ai pas le temps de vérifié, mais il est possible que scanf lisse les virgules.
Tu peut voir du coté de locale.h
en effet, en fesant setlocale("French",ALL)
tu défini les paramètres locaux au français. les lfottants sont alors affichés avec des virgules en utilisant printf.
je n'ai pas le temps de vérifié, mais il est possible que scanf lisse les virgules.
Merci mamiemando,
Le bout de code que tu m'as donné va tres bien.
Cependant, je suis supposée faire ce prog uniquement avec stdio.h.
tu n'aurais pas une variante, svp, si ce n'est pas abuser, lol?
normalement ca devrait commencer comme ceci :
char caractere = 'a';
while ( caractere != '\n')
{
scanf("%c", &caractere);
// puis c'est ici que les choses se corsent... Lol!
merci
Le bout de code que tu m'as donné va tres bien.
Cependant, je suis supposée faire ce prog uniquement avec stdio.h.
tu n'aurais pas une variante, svp, si ce n'est pas abuser, lol?
normalement ca devrait commencer comme ceci :
char caractere = 'a';
while ( caractere != '\n')
{
scanf("%c", &caractere);
// puis c'est ici que les choses se corsent... Lol!
merci
Voilà, j'ai trouvé.
Un grand merci quand même.
#include <stdio.h>
int main()
{
int partie_entiere;
double partie_decimale = 0;
double puissance_decimale = 1;
char caractere_lu;
double valeur_totale;
scanf("%d", &partie_entiere);
scanf("%c", &caractere_lu);
while (caractere_lu != '\n')
{
scanf("%c", &caractere_lu);
if (caractere_lu >= '0')
if (caractere_lu <= '9')
{
puissance_decimale *= 10;
partie_decimale = partie_decimale * 10 + caractere_lu - '0';
}
}
valeur_totale = partie_entiere + partie_decimale / puissance_decimale;
valeur_totale *= 3;
partie_entiere = (int)valeur_totale;
printf("%d\n", partie_entiere);
return 0;
}
Je reconnais, mamiemando, que ton prog est nettemnt plus compact que le mien .
Un grand merci, j'ai appris atof grâce à toi.
Un grand merci quand même.
#include <stdio.h>
int main()
{
int partie_entiere;
double partie_decimale = 0;
double puissance_decimale = 1;
char caractere_lu;
double valeur_totale;
scanf("%d", &partie_entiere);
scanf("%c", &caractere_lu);
while (caractere_lu != '\n')
{
scanf("%c", &caractere_lu);
if (caractere_lu >= '0')
if (caractere_lu <= '9')
{
puissance_decimale *= 10;
partie_decimale = partie_decimale * 10 + caractere_lu - '0';
}
}
valeur_totale = partie_entiere + partie_decimale / puissance_decimale;
valeur_totale *= 3;
partie_entiere = (int)valeur_totale;
printf("%d\n", partie_entiere);
return 0;
}
Je reconnais, mamiemando, que ton prog est nettemnt plus compact que le mien .
Un grand merci, j'ai appris atof grâce à toi.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mamiemando
Messages postés
33665
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
14 mai 2025
7 850
18 sept. 2006 à 23:43
18 sept. 2006 à 23:43
Mais de rien. Ceci dit se contraindre à n'utiliser que certain headers ce n'est pas vraiment dans l'optique de la programmation. Enfin je suppose que ça faisait partie des contraintes de l'exercice ;)