[newbie] double et int probleme

Résolu
CHKDSK2K Messages postés 144 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 18 septembre 2007 - 17 sept. 2004 à 19:31
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 17 sept. 2004 à 23:19
Bonjour j'ai crée un p'tit programme (mon tout premier) en c

mon probleme est que quand je change les variables int vers double il ne fonctionne plus ...

voici le code source

#include <stdio.h>

void main()
{
int Art_Nbre_Tot = 0;
int Art_Nbre_Enc = 0;

int Prix_HTVA_Enc = 0;
int Prix_HTVA_Total = 0;

int Prix_TVA_Enc = 0;
int Prix_TVA_Total = 0;

int Pourcentage_TVA_Enc = 0;

int Prix_Total = 0;

system("CLS");

printf("+---------------------------------------------------+\n");
printf("| Bonjour et bienvenue dans mon premier programme C |\n");
printf("| Il va calculer les prix des articles TTC |\n");
printf("+---------------------------------------------------+\n");
getch();
printf("Vous avez combien d'articles ? ");
scanf("%d",&Art_Nbre_Tot);

while(Art_Nbre_Enc <= (Art_Nbre_Tot-1))
{
Art_Nbre_Enc = Art_Nbre_Enc +1;

printf("\n");
printf("Quel est le montant de votre de l'article %d ? ",Art_Nbre_Enc);
scanf("%d",&Prix_HTVA_Enc);

printf("Quel est le \%% de tva de l'article %d ? ",Art_Nbre_Enc);
scanf("%d",&Pourcentage_TVA_Enc);

/*Calcul le montant de la TVA*/
Prix_TVA_Enc = Prix_HTVA_Enc / 100 * Pourcentage_TVA_Enc;
Prix_TVA_Total = Prix_TVA_Total + Prix_TVA_Enc;

/*Calcul le prix HTVA*/
Prix_HTVA_Total = Prix_HTVA_Total + Prix_HTVA_Enc;

};

Prix_Total = Prix_TVA_Total + Prix_HTVA_Total;

printf("\nVous avez achete pour un montant HTTC de %d Euro",Prix_HTVA_Total);
printf("\nVous avez un total de TVA de %d Euro",Prix_TVA_Total);
printf("\nLe total des articles + la TVA = %d Euro \n",Prix_Total);

printf("\nMerci d'avoir utilis? mon programme");
return 0;
}
donc je voudrais changer int Art_Nbre_Tot 0; en double Art_Nbre_Tot 0; mais alors fonctionne pas ... savez vous me dire pourquoi ? svp merci :d
DOS-chkdsk-2K supprimer.chkdsk@callantdavid.be.tf

31 réponses

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
17 sept. 2004 à 19:42
tous tes printf et scanf utilisent "%d", change pour "%lf" et devrait aller je pense ;)
Mais ca ne sert a rien par exemple ds le cas du nombre d'article total et enc (?), laisse en int car tu n'auras jamais 1.5 ordinateur par exemple.
Donc je repete :
%d pour int
%lf pour double

++
3
CHKDSK2K Messages postés 144 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 18 septembre 2007
17 sept. 2004 à 19:49
Merci pour cette reponse tres tres rapide ;)

encore une petite question si je px ?

comment verrifier que la personne a bien donner "un nombre" et pas & d etc ...

ENCORE MERCI
DOS-chkdsk-2K
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
17 sept. 2004 à 19:59
Ben jveux pas dire de betises mais scanf fait ca, ou alors sscanf je crois, cherche cette fonction, je crois ke c ca...
0
CHKDSK2K Messages postés 144 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 18 septembre 2007
17 sept. 2004 à 20:13
heu je sais pas mais quand je tape scanf(%lf,&var)
et que je lui donne d il plante le programme je voudrais qu'il me dise "vous devez donner un nombre"

thanks
DOS-chkdsk-2K
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_shown Messages postés 40 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 24 décembre 2007
17 sept. 2004 à 21:18
Salut, alors ya des erreurs dans les réponses :
pour une valeur entiere tu utilises int (%i) et ; pour une valeur réelle tu peux utiliser double (%d) ou float (%f) donc si tu déclares tes variables avec "int" dans ton scanf va falloir mettre %i et pas %d.

tu pourrais aussi ajouter une fonction a la fin du programme pour attendre avant de fermer la fenetre:
par exemple tu peux faire ca :

tu commences ton code juste apres le main par :
char chr;
while(chr != 'q'){

.................

et a la fin tu mets un truc du genre :
printf("\n\n\nveuillez maintenant appuyez sur <q> pour quitter ou sur une autre touche pour recommencer");
chr = getche();

;)
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
17 sept. 2004 à 21:24
oula pas du tt !!
%i ou %d c pour les entiers !
%f et %lf c pour, rexpectivement, float et double !

getche() c conio.h, borland and co, a ne pas utiliser jpense, enfin jle preconise po :/

++
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
17 sept. 2004 à 21:27
conio.h n'a rien à voir avec du C/ANSI => à éviter...

getchar() le remplace avantageusement, défini dans stdio.h
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 sept. 2004 à 21:35
pour gerer l'erreur, voir valeur retour de scanf

http://www.cplusplus.com/ref/cstdio/scanf.html

un truc comme ca

puts("Entrez un nombre");
while( !(s scanf( "%d", &n )) || s EOF )
{
while( (c=getc(stdin)) != EOF && c != '\n' );
puts( "Erreur, entrez un nombre" );
}
0
CHKDSK2K Messages postés 144 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 18 septembre 2007
17 sept. 2004 à 21:36
shown

Merci pour l'idée avec "while(chr != 'q')"

pour le reste je ne vais pas intervenir juste une chose j'ai mit dans le code double et %f et cela fonctionne tres bien ....

Bonne soirée à tous

(je vais mettre mon code quand il est fini ok ?)

DOS-chkdsk-2K supprimer.chkdsk@callantdavid.be.tf
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 sept. 2004 à 21:36
mais le mieux c'est de tout lire avec fgets et de faire un sscanf
0
CHKDSK2K Messages postés 144 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 18 septembre 2007
17 sept. 2004 à 22:05
dsl mais j'en profite pour :d ....

fgets = ?

et la dif entre sscanf et scanf est (me dite pas il y a deux s lol)?

Merci ;)

DOS-chkdsk-2K
0
cs_shown Messages postés 40 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 24 décembre 2007
17 sept. 2004 à 22:23
AlexMan tu te plantes, double c bien pour des réels c'est certain.
Les entiers comme le nom l'indique c int pour integer.
Et %f c pour float et %lf pour long float tu racontes vraiment n'imprte quoi pourquoi un double aurait l'abréviation "lf" ?...
Vérifies si tu sais pas ...
0
cs_shown Messages postés 40 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 24 décembre 2007
17 sept. 2004 à 22:25
fgets c comme un gets sauf que c'est dans un fichier.
tu as aussi fprintf, fopen, fclose etc...

pour le sscanf je sais pas...
0
CHKDSK2K Messages postés 144 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 18 septembre 2007
17 sept. 2004 à 22:30
Petite question alors ?

(ne m'en veux pas je suis Newbie)

mais pourquoi dans le cs plus haut quand fait la var double xxx
et que je tape plus bas %d, xxx il ne veut pas ? mais quand je tape %f, xxx il fonctionne bien ? (je px me tromper je vais verrifier ...

(voir le lien ici )

DOS-chkdsk-2K
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 sept. 2004 à 22:34
shown > AlexMAN a raison et fgets c'est pas comme gets, tu peux faire un controle de bord, la difference est fondamentale, c'est pour ca qu'on conseille toujours fgets pour lire sur stdin plutot que gets
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 sept. 2004 à 22:36
CHKDSK2K > %lf pour double, %f pour float, %d ou %i pour int, %u pour un type unsigned...
0
cs_shown Messages postés 40 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 24 décembre 2007
17 sept. 2004 à 22:37
Deja commence par ajouter deux include :
#include <windows.h>
#include <conio.h>
la premiere pour system("CLS") et la deuxieme pour getch().

Sinon tu mélanges pas mal de choses:

si tu déclares tes variables avec double utilises partout %d
Par contre si tu veux utiliser float qui est largement suffisant tu mets partout %f et pas %d ou %lf.

float, double, et long float sont trois types pour des reels.
La seule différence c'est la précision et la place qu'ils occupent.
float est le plus approprié dans ton cas.
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 sept. 2004 à 22:42
et tu sor ca d'ou long float ? c'est pas dans le standard, comme ces entetes
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
17 sept. 2004 à 22:42
mais shown arrete avec tes double %d !!! ne l'ecoute surtout pas CHKDSK2K !
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
17 sept. 2004 à 22:44
%lf EST dans standard...

l : argument is interpreted as long int (interger types) or double (floating point types).
0
Rejoignez-nous