Probleme D'Un Programme En Langage C

Résolu/Fermé
Vince - 24 oct. 2007 à 19:34
SmallFitz Messages postés 351 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 21 juin 2013 - 27 oct. 2007 à 01:36
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'
A voir également:

3 réponses

mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
24 oct. 2007 à 21:34
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
0
dubcek Messages postés 18757 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 19 décembre 2024 5 623
25 oct. 2007 à 10:08
 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
0
SmallFitz Messages postés 351 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 21 juin 2013 185
27 oct. 2007 à 01:36
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
0