Probleme D'Un Programme En Langage C
Résolu
Vince
-
SmallFitz Messages postés 358 Date d'inscription Statut Membre Dernière intervention -
SmallFitz Messages postés 358 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voilà mon problème, je suis en 3eme, et donc débutant en langage C,
J'ai écris un programme permettant de rassembler les additions, soustractions, multiplication, division ainsi que la racine carrée d'un nombre et x^y,
je compile donc le programme ( Dev C++ )
qui me dit qu'il n'y a pas d'erreur,
jouvre donc le programme, mais ( le programme viendra si dessous ), dès que j'entre la lettre pour le switch-case, une fenetre me dis que le programme "OP.exe" doit fermer car il a rencontré une erreur, est ce du au programme ? ou autre chose ?
voilà le programme :
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main (void)
{
int a;
puts("Type De Calcul");
scanf("%s", a);
autre:
switch (a)
{
case 'a': goto add;
case 's': goto sou;
case 'm': goto mul;
case 'd': goto div;
case 'p': goto xpy;
case 'r': goto rc;
}
add:
{
int a, b;
puts("Entrez 2 valeurs");
scanf("%d %d", &a, &b);
printf("%d\n", a+b);
puts("Autre Calcul ?");
scanf("%s", &a);
switch (a)
{
case 'O': goto autre;
case 'N': goto fin;
}
}
sou:
{
int a, b;
puts("Entrez 2 valeurs");
scanf("%d %d", &a, &b);
printf("%d\n", a-b);
puts("Autre Calcul ?");
scanf("%s", &a);
switch (a)
{
case 'O': goto autre;
case 'N': goto fin;
}
}
mul:
{
int a, b;
puts("Entrez 2 valeurs");
scanf("%d %d", &a, &b);
printf("%d\n", a*b);
puts("Autre Calcul ?");
scanf("%s", &a);
switch (a)
{
case 'O': goto autre;
case 'N': goto fin;
}
}
div:
{
int a, b;
puts("Entrez 2 valeurs");
scanf("%d %d", &a, &b);
printf("%d\n", a/b);
puts("Autre Calcul ?");
scanf("%s", &a);
switch (a)
{
case 'O': goto autre;
case 'N': goto fin;
}
}
xpy:
{
int a, b;
puts("Entrez 2 valeurs");
scanf("%f", &a, &b);
printf("%f\n", pow( a, b ));
puts("Autre Calcul ?");
scanf("%s", &a);;
switch (a)
{
case 'O': goto autre;
case 'N': goto fin;
}
}
rc:
{
int a, b;
puts("Entrez 1 valeur");
scanf("%f", &a);
printf("%f\n", sqrt( a ));
puts("Autre Calcul ?");
scanf("%s", &a);
switch (a)
{
case 'O': goto autre;
case 'N': goto fin;
}
}
fin:;
}
Merci d'avance,
Vince'
Voilà mon problème, je suis en 3eme, et donc débutant en langage C,
J'ai écris un programme permettant de rassembler les additions, soustractions, multiplication, division ainsi que la racine carrée d'un nombre et x^y,
je compile donc le programme ( Dev C++ )
qui me dit qu'il n'y a pas d'erreur,
jouvre donc le programme, mais ( le programme viendra si dessous ), dès que j'entre la lettre pour le switch-case, une fenetre me dis que le programme "OP.exe" doit fermer car il a rencontré une erreur, est ce du au programme ? ou autre chose ?
voilà le programme :
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main (void)
{
int a;
puts("Type De Calcul");
scanf("%s", a);
autre:
switch (a)
{
case 'a': goto add;
case 's': goto sou;
case 'm': goto mul;
case 'd': goto div;
case 'p': goto xpy;
case 'r': goto rc;
}
add:
{
int a, b;
puts("Entrez 2 valeurs");
scanf("%d %d", &a, &b);
printf("%d\n", a+b);
puts("Autre Calcul ?");
scanf("%s", &a);
switch (a)
{
case 'O': goto autre;
case 'N': goto fin;
}
}
sou:
{
int a, b;
puts("Entrez 2 valeurs");
scanf("%d %d", &a, &b);
printf("%d\n", a-b);
puts("Autre Calcul ?");
scanf("%s", &a);
switch (a)
{
case 'O': goto autre;
case 'N': goto fin;
}
}
mul:
{
int a, b;
puts("Entrez 2 valeurs");
scanf("%d %d", &a, &b);
printf("%d\n", a*b);
puts("Autre Calcul ?");
scanf("%s", &a);
switch (a)
{
case 'O': goto autre;
case 'N': goto fin;
}
}
div:
{
int a, b;
puts("Entrez 2 valeurs");
scanf("%d %d", &a, &b);
printf("%d\n", a/b);
puts("Autre Calcul ?");
scanf("%s", &a);
switch (a)
{
case 'O': goto autre;
case 'N': goto fin;
}
}
xpy:
{
int a, b;
puts("Entrez 2 valeurs");
scanf("%f", &a, &b);
printf("%f\n", pow( a, b ));
puts("Autre Calcul ?");
scanf("%s", &a);;
switch (a)
{
case 'O': goto autre;
case 'N': goto fin;
}
}
rc:
{
int a, b;
puts("Entrez 1 valeur");
scanf("%f", &a);
printf("%f\n", sqrt( a ));
puts("Autre Calcul ?");
scanf("%s", &a);
switch (a)
{
case 'O': goto autre;
case 'N': goto fin;
}
}
fin:;
}
Merci d'avance,
Vince'
Configuration: Windows XP Firefox 2.0.0.8
3 réponses
-
Arg alors il y a quelque chose qui ne va pas, c'est les goto (il faut éviter autant que possible de les utiliser si tu veux faire un "bon" programme.
De plus ton main est sensé retourner un int donc devrait se terminer par :return 0;
Voici le code que je te propose :#include <stdlib.h> #include <math.h> #include <stdio.h> int main(){ double x,y,res; char op; do{ printf("saisir une opération: exemple : 3 + 5\n"); }while(scanf("%lf %c %lf",&x,&op,&y)!=3); printf("operande1 = %lf\n",x); printf("operateur = %c\n",op); printf("operande2 = %lf\n",y); switch(op){ case '+': res = x + y; break; case '-': res = x - y; break; case 'p': res = pow(x,y); break; //... default: fprintf(stderr,"opérateur inconnu !\n"); return 1; } printf("resultat = %lf\n",res); return 0; }
A l'exécution :(mando@aldur) (~) $ gcc -lm -W -Wall -o plop.exe plop.c (mando@aldur) (~) $ ./plop.exe saisir une opération: exemple : 3 + 5 3 p 5 operande1 = 3.000000 operateur = p operande2 = 5.000000 resultat = 243.000000
Bonne chance -
int a; puts("Type De Calcul"); scanf("%d", &a);
scanf doit lire un entier (int) %d et il faut passer l'adresse de a : &a -
Oui les GOTO en langage C sont vraiment à bannir.
Tu peux les utiliser en dernier recours.
Seulement un goto est TOUJOURS remplaçable, théoriquement, par des conditions.
Donc je corrige : tu ne peux doit jamais les utiliser même "en dernier recours". :D