[RESOLU] Problème en C (programme sans interface graphique)
Forum Programmation : [RESOLU] Problème en C (programme sans interface graphique)
Bonjour à tous !
Voilà mon problème :
Je débute en C et je fais une petite calculette (sans interface graphique) histoire de me perfectionné...
Ma calculette fait appel à une fonction selon le type d'opération, actuellement je suis en train de faire la fonction addition() et quand je veux mettre des nombres décimaux, il saute le scanf suivant et écrit que le résultat est le nombre tronqué.
Je pense que vous comprendrez mieu avec le code source :
| Citation :
|
Et voilà le résultat sur la console :
Merci d'avance pour vos solutions ;-) !
ça c'est bien décrit ;-)
Du coup, j'ai compris ton problème:
dans ton scanf tu met en gros %d. Or, ce n'est que pour les nombres entiers (d comme decimal et pas double ;-) )
il faut utiliser %f (pour float et double).
EDIT: dans ton exemple si tu mettais un fflush(stdin), il te le redemanderait, mais si tu met 3.5, il n'aurait pris en compte que 2 pour le premier et 3 pour le second.
Merci !
Je débute et j'ai pas encore vu la fonction fflush(stdin)
Elle consite en quoi ? et comment l'utiliser ?
si tu demande 3 entiers avec scanf() et que l'utilisateur tapes: 21,56,89
le premier scanf prend "21", et laisse ",56,89" dans le buffer (mémoire tampon) du clavier, le prochain scanf prend "56" et laisse ",89" sans que l'utilisateur n'ai eu le temps de taper quoi que ce soit.
fflush(stdin) permet de vider ce buffer clavier après utilisation. Dans l'exemple des 3 scanf(), le 2ème scanf() redemandera une nouvelle valeur car "56,89" ne se trouvent plus dans le buffer clavier.
Personnellement, je pense qu'un fflush(stdin) devrait être fait après tout appel à scanf(). Sinon ça sert aussi à l'écriture de fichiers pour s'assurer que tout y est écrit avant de le fermer.
Code :
|
Argh ! nouveau problème !
Voilà ce que j'ai mis :
| Citation :
|
Et voilà le resultat :
Tu peux m'aider ? ;-)
J'ai mis le fflush(stdin) dans mon code :
| Citation :
|
Mais mon compilateur refuse de compiler il dit "Permission denied".
Ai-je fais une erreur de syntaxe ?
Effectivement, je me suis trompé.
Le printf prend %f pour les type "float" et "double".
Mais le scanf, lui, ne prend que les types "float" pour %f
Et d'après ce que j'ai vu dans la doc, il n'y a rien pour les "double".
Donc tu n'as que 2 possibilités:
- soit tu déclares tes variables en "float"
Code :
|
- soit tu gardes tes "double" et tu ajoute une autre variable temporaire en "double" et tu fait une conversion implicite de float en double (car le codage de ces types sont différents).
Code :
|
Pour le fflush(stdin); si tu as mis le #include <stdio.h>, et que tu n'as pas déclaré de variable stdin, il ne devrait pas y avoir de problème,
| Citation :
|
Ok merci, je t'avais dis que t'étais un boss en programmation ! ;-)
Pour le fflush(stdin), c'était un bug de mon compilateur et rien de plus.
Mais j'ai une question à te poser :
Est-ce que la variable "temp" est particulière ?
Est-t-elle l'inverse des constante ?
Pourquoi tu l'initialise à 213.5 ?
Bon d'accord sa fait plusieurs questions mais c'est sur un seul sujet ! :-D ;-)
non temp est une variable comme une autre. Je sais pas pourquoi je l'ai initialisé à 213.5, mais ça n'a aucun intérêt :-D
l'intérêt de la variable temp est de faire passer un float
en fait une variable float te suffit, pour faire le scanf(), ensuite elle est convertie en double lorsque tu fait un = car nb1=temp; est en fait traduit par le compilateur en nb1=(double)temp; c'est le cast implicite.
Ok merci beaucoup pour ton aide CRicky !
Il y a 2229 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

CRicky