Programme langage C
Fermé
am202
-
7 oct. 2020 à 18:35
[Dal] Messages postés 6200 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 7 janvier 2025 - 8 oct. 2020 à 09:50
[Dal] Messages postés 6200 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 7 janvier 2025 - 8 oct. 2020 à 09:50
A voir également:
- Programme langage C
- Langage ascii - Guide
- Programme demarrage windows 10 - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Désinstaller programme windows 10 - Guide
2 réponses
[Dal]
Messages postés
6200
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
7 janvier 2025
1 097
Modifié le 7 oct. 2020 à 19:06
Modifié le 7 oct. 2020 à 19:06
Salut am202,
Quand tu postes du code sur le forum, fais le avec les balises de code.
Il y a plusieurs problèmes.
Les plus saillants sont :
En compilant ce code avec un compilateur signalant, outre des erreurs de syntaxe, des avertissements, on obtient une floppée d'avertissements :
N'ignore pas les avertissements, car, quand bien même ton code compile, les avertissements te signalent dans la quasi totalité des cas des choses qui n'ont pas de sens et qui sont très probablement des erreurs.
Dal
Quand tu postes du code sur le forum, fais le avec les balises de code.
Il y a plusieurs problèmes.
Les plus saillants sont :
- tes tests du type
if (99<prix<500) {
ne font pas ce que tu penses. En C il faudrait écrireif ( (99<prix) && (prix<500) ) {
pour avoir l'effet recherché - à la ligne
if(500<prix<1000);{
, en plus du problème similaire à celui ci-dessus, tu as mis un;
après la parenthèse, comme si tu voulais terminer ton instruction (et que tu dois bien sûr retirer) - tes tests seront toujours faux, car tu compares la variable
prix
à ces bornes, alors queprix
vaut0
à ce stade, car c'est dansx
que tu fais ton addition - probablement, en fin de programme, tu voudras afficher
prix
, qui est la variable contenant le résultat de ton calcul de remise, non ?
En compilant ce code avec un compilateur signalant, outre des erreurs de syntaxe, des avertissements, on obtient une floppée d'avertissements :
$ gcc -Wall 36879476.c 36879476.c: In function ‘main’: 36879476.c:6:3: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration] printf ("saisir prix\n"); ^~~~~~ 36879476.c:6:3: warning: incompatible implicit declaration of built-in function ‘printf’ 36879476.c:6:3: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’ 36879476.c:1:1: +#include <stdio.h> int main (void) 36879476.c:6:3: printf ("saisir prix\n"); ^~~~~~ 36879476.c:7:3: warning: implicit declaration of function ‘scanf’ [-Wimplicit-function-declaration] scanf("%f",&prix); ^~~~~ 36879476.c:7:3: warning: incompatible implicit declaration of built-in function ‘scanf’ 36879476.c:7:3: note: include ‘<stdio.h>’ or provide a declaration of ‘scanf’ 36879476.c:10:13: warning: comparison of constant ‘500’ with boolean expression is always true [-Wbool-compare] if (99<prix<500) { ^ 36879476.c:10:8: warning: comparisons like ‘X<=Y<=Z’ do not have their mathematical meaning [-Wparentheses] if (99<prix<500) { ~~^~~~~ 36879476.c:13:13: warning: comparison of constant ‘1000’ with boolean expression is always true [-Wbool-compare] if(500<prix<1000);{ ^ 36879476.c:13:8: warning: comparisons like ‘X<=Y<=Z’ do not have their mathematical meaning [-Wparentheses] if(500<prix<1000);{ ~~~^~~~~ 36879476.c:13:2: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation] if(500<prix<1000);{ ^~ 36879476.c:13:20: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’ if(500<prix<1000);{ ^ 36879476.c:19:2: warning: incompatible implicit declaration of built-in function ‘printf’ printf("total : %f\n",x); ^~~~~~ 36879476.c:19:2: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’
N'ignore pas les avertissements, car, quand bien même ton code compile, les avertissements te signalent dans la quasi totalité des cas des choses qui n'ont pas de sens et qui sont très probablement des erreurs.
Dal
#include <stdio.h>
int main ()
{
float prix;
float x=0;
do {
printf ("saisir prix\n");
scanf("%f",&prix);
x = x+prix;
} while( prix != 0);
if ((99<x)&&(x<500)){
prix=x*0.9;
}
if((500<x)&&(x<1000)){
prix=x*0.8;
}
else{
prix=x*0.7;
}
printf("total : %f\n",prix);
}
j'ai écris ça du coup en corrigant sauf que à tout les coups il me calcule une remise de 30% à tout les coups
[Dal]
Messages postés
6200
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
7 janvier 2025
1 097
Modifié le 8 oct. 2020 à 09:56
Modifié le 8 oct. 2020 à 09:56
pour que ton code soit doté de la coloration syntaxique correspondante au bon langage, il faut cliquer sur la flèche basse à droits de l'icône de balise de code et choisir le langage C.
pour ton problème, il ne se serait pas manifesté si tu n'avais pas remplacé la dernière condition présente dans ton code posté à l'origine par un
fais également les deux tests suivants et déduis en les changements à effectuer à ton code pour qu'il se comorte comme il le devrait :
aide toi de
pour ton problème, il ne se serait pas manifesté si tu n'avais pas remplacé la dernière condition présente dans ton code posté à l'origine par un
elsedans le code ci-dessus. Ce
elses'exécute toujours lorsque la condition qui précède est fausse, ce qui n'est pas le comportement souhaité.
fais également les deux tests suivants et déduis en les changements à effectuer à ton code pour qu'il se comorte comme il le devrait :
- achète deux articles à 250 chacun
- achète un article à 10
aide toi de
printf()intermédiaires où tu affiches les valeurs de
xet de
prixà différents moments