Probleme D'Un Programme En Langage C

Résolu
Vince -  
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'
Configuration: Windows XP
Firefox 2.0.0.8

3 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
     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
  3. SmallFitz Messages postés 358 Date d'inscription   Statut Membre Dernière intervention   189
     
    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