[newbie] double et int probleme [Résolu]

Signaler
Messages postés
144
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
18 septembre 2007
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
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

Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
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

++
Messages postés
144
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
18 septembre 2007

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
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Ben jveux pas dire de betises mais scanf fait ca, ou alors sscanf je crois, cherche cette fonction, je crois ke c ca...
Messages postés
144
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
18 septembre 2007

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
Messages postés
40
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
24 décembre 2007

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();

;)
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
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 :/

++
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
conio.h n'a rien à voir avec du C/ANSI => à éviter...

getchar() le remplace avantageusement, défini dans stdio.h
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
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" );
}
Messages postés
144
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
18 septembre 2007

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
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
mais le mieux c'est de tout lire avec fgets et de faire un sscanf
Messages postés
144
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
18 septembre 2007

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
Messages postés
40
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
24 décembre 2007

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 ...
Messages postés
40
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
24 décembre 2007

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...
Messages postés
144
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
18 septembre 2007

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
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
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
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
CHKDSK2K > %lf pour double, %f pour float, %d ou %i pour int, %u pour un type unsigned...
Messages postés
40
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
24 décembre 2007

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.
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
et tu sor ca d'ou long float ? c'est pas dans le standard, comme ces entetes
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
mais shown arrete avec tes double %d !!! ne l'ecoute surtout pas CHKDSK2K !
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
%lf EST dans standard...

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