Code erroner
abdinelick
-
Desperaxe Messages postés 137 Date d'inscription Statut Membre Dernière intervention -
Desperaxe Messages postés 137 Date d'inscription Statut Membre Dernière intervention -
je suis un nouveau programmeur dans le langage C et je veux ecrire un programme pour une calculatrice mais quand je compile il y a toujours une repetition dans la boucle voila mon code
svp quelqu'un pour m'aider a l'affichage on me demande de faire mon choix de l'operation et rien ne se passe
svp quelqu'un pour m'aider a l'affichage on me demande de faire mon choix de l'operation et rien ne se passe
#include<stdio.h> #include<stdlib.h> int main(){ float b,a; char op; do { printf("choosen an operation\n \n"); printf(" 1: addition \n 2: soustration \n 3: multiplication \n 4: division \n"); scanf("%c",&op); } while ((op !=1) && (op !=2) && (op !=3) && (op !=4)); printf("type the first number"); scanf("%f",a); printf("type the second number"); scanf("%f",b); switch(op){ case '+' : printf("%f + %f=%f",a,b,a+b); break; case '-' : if (a<b){ printf("operation impossible a must be compelsary supertior to b"); } else { printf(" %f - %f= %f",a,b,a-b); } break; case '*' : printf("%f * %f = %f",a,b,a*b); break; case'/': if(b==0){ printf("the division by zero is impossible"); } else{ printf(" %f / %f= %f",a,b,a/b); } break; default: printf("operation incorrect \n"); } system ("pause"); return 0; }
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Code erroner
- Code ascii - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
2 réponses
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
#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 !