IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

problème d'exécution d'un programme C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 86
    Par défaut problème d'exécution d'un programme C
    salut ..voilà l'énoncé d'un exercice
    Écrire un programme C qui permet de saisir deux entiers et un caractère et d’effectuer l’opération arithmétique qui correspond à la valeur de l’opérande (‘+’, ‘*’, ‘-‘, ‘/’).
    Le programme devra afficher le résultat de l’opération

    voilà mon travail

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    float a,b;
    char op;
    main()
    {
    printf("entrer un entier ");scanf("%f",&a);
    printf("entrer un deuxieme entier ");scanf("%f",&b);
    printf("entrer un operateur ");scanf("%c",&op);
    if(op == '+')
    {
    printf("le resultat est %f \n ",a+b);
    }
    if(op == '-')
    {
    printf("le resultat est %f \n ",a-b);
    }
    if(op == '*')
    {
    printf("le resultat est %f \n ",a*b);
    }
    if(op =='/')
    {
    if(b == 0)
    {
    printf("impossible de diviser par 0 \n");
    }
    else
    {
    printf("le resultat est %f \n ",a/b);   
    }
    }
    getch();
    }
    ==> le problème c'est que lors de l'exécution ..je tape les entiers et l'opérateur puis quand je tape sur "entrée" la fenêtres d'exécution se ferme automatiquement
    quelle le problème et quelle la solution???
    et merci d'avance
    NB: je travaille avec le compilateur DEV C++ et sous windows

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Par défaut
    Bonsoir,

    Par soucis de lisibilité tu as à ta disposition dans la barre d'outil des balises pour poster du code sybolisées par le #. N'hésite pas à l'utiliser la prochaine fois

    Voilà ton code corrigé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
     
    int main() //début de la fonction principale
    {
    	float a,b;
        char op;
         printf("entrer un operateur ");scanf("%c",&op);
        printf("entrer un entier ");scanf("%f",&a);
        printf("entrer un deuxieme entier ");scanf("%f",&b);
     
    if(op == '+')
    {
    printf("le resultat est %f \n ",a+b);
    }
    if(op == '-')
    {
    printf("le resultat est %f \n ",a-b);
    }
    if(op == '*')
    {
    printf("le resultat est %f \n ",a*b);
    }
    if(op =='/')
    {
    	if(b == 0)
    	{
    		printf("impossible de diviser par 0 \n");
    	}
    	else
    	{
    		printf("le resultat est %f \n ",a/b); 
    	}
    	}
    	return 0; // le retour pour la fonction principale int main()
    	getch();
    }
    Dans un programme il y a toujours le point d'entrée (là où débute tes instructions) qui est le int main(). Dans ta version tu avais en effet déclaré tes variables float a,b; et char op; avant le main. Cela dépend après de l’utilisation que tu en fais, et dans le cas de ton exercice les déclarer après le main suffit largement.

    Tu avais ensuit écrit seulement main (qui est le nom de ta fonction principale), il te faut auparavant préciser le type de retour. Il existe plusieurs variante dans l'écriture de la fonction main dépendant du compilateur que tu utilise par exemple: void main(void) ou int main() ou int main(int argc, char *argv[].

    Bon courage pour la suite
    Voici un lien qui pourrait t'être utile
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    ==> le problème c'est que lors de l'exécution ..je tape les entiers et l'opérateur puis quand je tape sur "entrée" la fenêtres d'exécution se ferme automatiquement
    quelle le problème et quelle la solution???
    En fait, il n'y a pas de problème : la fenêtre se ferme parce que le programme est terminé. On arrive sur le return 0 (le compilateur bien configuré aurait dû émettre un warning sur le fait que le getch() ne peut pas être exécuté)

    Inverser la position du return 0 et du getch() résoudra le "problème", le getch() faisant une lecture directe sur le clavier.

    Toutefois, il faut voir que le getch() est non standard et que le remplacer par la fonction standard getchar() fera réapparaitre le "problème" :
    Un getchar() avant le return serait lui aussi censé empêcher le programme de se terminer en l'absence d'une intervention explicite au clavier. Mais le dernier scanf() laisse dans le buffer d'entrée au moins le caractère '\n' tapé après le nombre. Ce caractère est capté par le getchar() et le programme est terminé.
    Il serait préférable de toute façon de s'assurer qu'après chaque lecture clavier le buffer est vide, ce qui sécurise les entrées suivantes au clavier. Pour ce faire, on peut utiliser une fonction dont le code est dans la FAQ ou compléter les formats avec "%*[^\n]%*c" comme ici : scanf("%c%*[^\n]%*c",&op);

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/02/2011, 13h52
  2. Problème d’exécution d'un programme
    Par lucciana dans le forum Qt
    Réponses: 3
    Dernier message: 02/02/2011, 23h47
  3. Problème à l'exécution d'un programme C++ : bug assembleur
    Par lyxthe dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 16/08/2010, 21h43
  4. Problème à l'exécution d'un programme ADA
    Par daninou dans le forum Ada
    Réponses: 4
    Dernier message: 01/10/2007, 17h48
  5. Problèmes d'exécution d'un programme Fortran
    Par Butterfly83 dans le forum Fortran
    Réponses: 16
    Dernier message: 06/08/2007, 10h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo