Problème avec xcode en C

Orilion

Membre junior
28 Octobre 2011
11
0
J'ai eu une surprise en créaient en exécutant un petit scripte, le voilà:

#include <stdio.h>

int main (int argc, const char * argv[])
{

double a= 0;
printf("Rentré un nombre\n");
scanf("%f", &a);
printf("\n Vous avez rentré %f ", a);
return 0;
}

Il me donne :

Rentré un nombre
23.4

Vous avez rentré 0.000000 Program ended with exit code: 0

Le problème se règle en mettant float a la place de double.

J'amerai bien savoir pourquoi j'ai se problème et comment le résoudre.
 

bokeh

Membre confirmé
27 Décembre 2008
261
43
Remplace également "Rentré un nombre" par "Rentrez un nombre"
 

Orilion

Membre junior
28 Octobre 2011
11
0
C'est fait.

C'est posible de vérifié si l'utilisateur rentre autre choses qu'un nombres et protéger le code de tout bug.

Car s'il rentre une lettre a la place d'un nombre le code se répète tous seul a l'infinie.
 
Dernière édition:

ntx

Vénérable sage
Club MacG
15 Octobre 2004
12 073
376
92
Tu programmes la saisie d'une chaîne et tu l'analyses après saisie pour voir si elle correspond bien à un nombre flottant : signe + ou -, suite de caractères de 0 à 9, séparateur décimal, suite de caractères de 0 à 9 pour une représentation "classique" d'un flottant. Je te laisse voir pour une représentation "scientifique". Ensuite tu convertis ta chaîne en double.

A noter que la fonction strtod permet de faire ce boulot et gère une erreur.
 
Dernière édition:

Orilion

Membre junior
28 Octobre 2011
11
0
Tu programmes la saisie d'une chaîne et tu l'analyses après saisie pour voir si elle correspond bien à un nombre flottant : signe + ou -, suite de caractères de 0 à 9, séparateur décimal, suite de caractères de 0 à 9 pour une représentation "classique" d'un flottant. Je te laisse voir pour une représentation "scientifique". Ensuite tu convertis ta chaîne en double.

A noter que la fonction strtod permet de faire ce boulot et gère une erreur.

Tu peut explique un plus la fonction strtod s'il te plait, sinon je comprends le principe.