Code erroner
Fermé
abdinelick
-
Modifié par baladur13 le 8/02/2017 à 20:44
Desperaxe Messages postés 137 Date d'inscription dimanche 22 février 2015 Statut Membre Dernière intervention 11 novembre 2021 - 12 févr. 2017 à 14:55
Desperaxe Messages postés 137 Date d'inscription dimanche 22 février 2015 Statut Membre Dernière intervention 11 novembre 2021 - 12 févr. 2017 à 14:55
A voir également:
- Code erroner
- Code asci - Guide
- Code puk bloqué - Guide
- Code telephone oublié - Guide
- Code activation windows 10 - Guide
- Code gta 4 ps4 - Guide
2 réponses
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié par [Dal] le 9/02/2017 à 10:15
Modifié par [Dal] le 9/02/2017 à 10:15
Salut abdinelick,
Il y a de nombreux problèmes :
11 scanf("%c",&op);
Tu captures donc un caractère sur le flux stdin
12 } while ((op !=1) && (op !=2) && (op !=3) && (op !=4));
Tu compares op à l'entier : 1, et non au caractère '1'. Corrige ces comparaisons. De plus, on est bien d'accord que tu as fait le choix que
14 scanf("%f",a);
Ton compilateur a dû t'avertir avec un warning là dessus, ainsi qu'en ligne 16. C'est un pointeur sur float que tu dois passer, donc l'adresse de a. Préfixe le avec &, et corrige aussi la ligne 16.
19 case '+' : printf("%f + %f=%f",a,b,a+b);
Dans ton switch, tu compares op à
Tes printf devraient être tous terminés par
Ton prototype main devrait être
Compile avec les warnings, et traite chaque warning. Les avertissements n'empêchent pas la compilation, mais signalent la plupart du temps des erreurs.
Dal
Il y a de nombreux problèmes :
11 scanf("%c",&op);
Tu captures donc un caractère sur le flux stdin
12 } while ((op !=1) && (op !=2) && (op !=3) && (op !=4));
Tu compares op à l'entier : 1, et non au caractère '1'. Corrige ces comparaisons. De plus, on est bien d'accord que tu as fait le choix que
opest sensé contenir les caractères
'1',
'2',
'3'ou
'4', et pas
'+',
'-',
'*'ou
'/'...
14 scanf("%f",a);
Ton compilateur a dû t'avertir avec un warning là dessus, ainsi qu'en ligne 16. C'est un pointeur sur float que tu dois passer, donc l'adresse de a. Préfixe le avec &, et corrige aussi la ligne 16.
19 case '+' : printf("%f + %f=%f",a,b,a+b);
Dans ton switch, tu compares op à
'+', alors qu'il n'aura jamais cette valeur à cette ligne, puisque tu as exigé que op contienne
'1',
'2',
'3'ou
'4'pour sortir du while précédent.
Tes printf devraient être tous terminés par
\n
Ton prototype main devrait être
int main(void)ou
int main(int argc, char **argv)pour être du C standard.
Compile avec les warnings, et traite chaque warning. Les avertissements n'empêchent pas la compilation, mais signalent la plupart du temps des erreurs.
Dal
Desperaxe
Messages postés
137
Date d'inscription
dimanche 22 février 2015
Statut
Membre
Dernière intervention
11 novembre 2021
7
12 févr. 2017 à 14:55
12 févr. 2017 à 14:55
#include<stdio.h> #include<stdlib.h> int main() { float b,a; int op; do { puts("Choisissez une operation\n"); puts(" 1: addition \n 2: soustration \n 3: multiplication \n 4: division"); scanf("%d",&op); } while ((op !=1) && (op !=2) && (op !=3) && (op !=4)); printf("Inscrivez le premier nombre"); scanf("%f",&a); printf("Inscrivez le second nombre"); scanf("%f",&b); switch(op) { case 1: printf("%f + %f=%f",a,b,a+b); break; case 2: if (a<b) { printf("A doit etre strictement superieur a B"); } else { printf(" %f - %f= %f",a,b,a-b); } break; case 3: printf("%f * %f = %f",a,b,a*b); break; case 4: if(b==0) { printf("La division par 0 est impossible"); } else { printf(" %f / %f= %f",a,b,a/b); } break; default: printf("Operation Incorrecte \n"); } return 0; }
Salut. Je vais pas être agressif, ne le prend donc pas comme tel ok ?
Ce code, tu l'as pris sur Internet ? Ou tu l'as fais toi même ? J'ai un doute avec les printf écrits en Anglais..
Justement quand tu fais un affichage d'un texte tout simple, pour t'éviter le "\n" de fin de ligne, utilises plutôt un "puts" à la place du "printf" ( C'est juste un conseil )
Tu fais appel à "op" comme une variable " caractère ", mais ta première boucle while demande à ce que ce soit un nombre entre 1 et 4 inclus qui doivent être saisis. Et ton switch pourtant demande les caractères saisir, ça commence pas très bien malheureusement, là était le problème de ta boucle infinie.
Tes scanf n'appelaient pas les adresses de a et b, donc niveau saisie, tu as forcément dû avoir un warning ou une erreur toute simple.
Le code au dessus est ton code placé dans ce topic, corrigé, fonctionnel et ne contenant plus de warnings ou d'erreurs ( du moins de mon côté ), inspires en-toi pour tes prochains codes !