Rechercher : dans
Par :

Probleme D'Un Programme En Langage C

Dernière réponse le 27 oct 2007 à 01:36:18 Vince, le 24 oct 2007 à 19:34:31 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « Probleme D'Un Programme En Langage C » dans :
Caractéristiques du langage C VoirLe fichier source Le fichier source d'un programme écrit en langage C est un simple fichier texte dont l'extension est par convention .c. Note d'un visiteur (J.Grondin) : L'extension est en minuscules. Le .C (majuscule) est interprété par...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...

1

mamiemando, le 24 oct 2007 à 21:34:42

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

Répondre à mamiemando

2

dubcek, le 25 oct 2007 à 10:08:41

 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

Répondre à dubcek

3

 SmallFitz, le 27 oct 2007 à 01:36:18

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

Répondre à SmallFitz