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

Dev-C++ Discussion :

Calculette qui bug


Sujet :

Dev-C++

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2
    Par défaut Calculette qui bug
    Bjr, moi j'ai programé une calculatrice mais elle ne marche pas et affiche un bug a la compilation, un bug que je ne comprend pas et qui m'enerve

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
      long resultat = 0,n1 = 0,n2 = 0,calcul = 0, choix = 0,choix1 = 0;
     
                    printf("               BiEnVeNuE\n");
                    printf("     sur la ===XM=== calculatrice\n\n\n");
                    printf("Tu veux : \n 1.Faire un calcul\n 2.Quittez cette super calculette\n ");
                    scanf("%ld", &choix); 
     
    do 
    {
                    printf("Tu veux choisir un type de calcul?\n");
                    printf("\t1. OUI\n");
                    printf("\t2. NON\n");
                    printf("Attention !!! Si tu choisis NON l'application prendra fin\n");
                    scanf("%ld", &choix1);
     
     
                                 if ( choix1 == 1 )
                                    {
                                    printf ("====MENU CALCULATRICE====\n\n");        
                                    printf ("\t1.Addition\n");
                                    printf ("\t2.Soustraction\n");
                                    printf ("\t3.Multiplication\n");
                                    printf ("\t4.Division\n");
                                    printf ("Ton choix :  ");  
                                    scanf  ("%ld", &calcul);
     
     
                                                            if ( calcul == 1)
                                                            {
                                                            printf ("Cool, t'as choisi l'addition ( j'espere que c'est des gros nombre sinon t'es un gros noob)\n");
                                                            printf ("Choisi le nombre 1 : \n");
                                                            scanf  ("%ld",&n1);
                                                            printf ("Choisi le nombre 2 : \n");
                                                            scanf  ("%ld",n2);
     
                                                            resultat = n1 + n2;
     
                                                            printf ("Atttends je calcule...\n%ld + %ld = %ld",n1,n2,resultat);                                     
                                                            }
     
                                                            else if ( calcul == 2)
                                                            {
                                                            printf ("Super la soustraction !!\n");
                                                            printf ("Choisi le nombre 1 : ");     
                                                            scanf  ("%ld",&n1);
                                                            printf ("Choisi le nombre 2 : ");
                                                            scanf  ("%ld",&n2);
     
                                                            resultat = n1 - n2;
     
                                                            printf ("Une seconde...\n%ld - %ld = %ld",n1,n2,resultat);
                                                            }
     
                                                            else if ( calcul == 3)
                                                            {
                                                            printf ("Genial la multiplication !!\n");
                                                            printf ("Choisi le nombre 1 : ");     
                                                            scanf  ("%ld",&n1);
                                                            printf ("Choisi le nombre 2 : ");
                                                            scanf  ("%ld",&n2);
     
                                                            resultat = n1 * n2;
     
                                                            printf ("Attends,attend,attend...\n%ld * %ld = %ld",n1,n2,resultat);
                                                            }
     
                                                            else if ( calcul == 4)
                                                            {
                                                            printf ("Top la divisions!!\n");
                                                            printf ("Choisi le nombre 1 : ");     
                                                            scanf  ("%ld",&n1);
                                                            printf ("Choisi le nombre 2 : ");
                                                            scanf  ("%ld",&n2);
     
                                                            resultat = n1 / n2;
     
                                                            printf ("\n%ld / %ld = %ld",n1,n2,resultat);
                                                            }
     
                                 else
                                 {
                                 printf("Pour fermer cette application\n");
                                 printf("Cette calculette vous a ete presente par\n\n");
                                 printf("=:=:=:Xaevaer:=:=:=");
                                 printf("BYYYYYYYYYYYE ^^\n\n\n\n");
                                 }
     
    }while (choix == 1);
     
      system ("PAUSE");  	
      return 0;
    }
    Merci de bien vouloir copié collé sur dev-c++ et de me trouver pourquqoi sa bug

    merci d'avance et aurevoir

  2. #2
    Invité
    Invité(e)
    Par défaut Problème résolu ;)
    En fait, tu as deux problèmes tous simples à résoudre, dont un qui t'empêches de compiler, et un qui te ferais un joli plantage à l'exécution!
    La première c'est juste un oubli de fermeture d'accolades à la fin de ton if : ligne 84.
    La deuxième, c'est un petit oubli: scanf ("%ld",&n2); ligne 39
    Normalement (j'ai juste vérifié la compilation, pas le bon déroulement) ça devrait mieux marcher

  3. #3
    Invité
    Invité(e)
    Par défaut Solution toute prête
    J'ai décidé de bosser, et de rentrer tête baissée dans ton code. Voici une petite refonte du code à la Dreamker :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>	//Pour une petite fonction à la fin du programme...
     
    int main(int argc, char *argv[])
    {
      long resultat = 0,n1 = 0,n2 = 0,calcul = 0, choix = 1, choix1 = 0;
      int continuer = 1;
     
      printf("\t\tBiEnVeNuE\n");	//les /t, c'est mieux que la suite d'espaces !
      printf("\tsur la ===XM=== calculatrice\n\n\n");
      printf("Tu veux : \n 1.Faire un calcul\n 2.Quittez cette super calculette\n");
      scanf("%ld", &choix); 
     
      if(choix==1)
      {
       			printf("Tu veux choisir un type de calcul?\n");
      			printf("\t1. OUI\n");
      			printf("\t2. NON\n");
      			printf("Attention !!! Si tu choisis NON l'application prendra fin\n");
      			scanf("%ld", &choix1);
     
      			//Pourquoi faire une boucle alors que si tu appuies sur 2 tu quittes? mieux vaut vérifier la valeur de choix1 et quitter si elle est différente de 1
     
      		 	if (choix1==1)
      			{
    				   do	//La par contre, la boucle est utile: on raffiche le menu tant que l'utilisateur n'a pas fait ce qu'on lui demande
    				   {      
    				   		  system("CLS");	//cette fonction sert à effacer la console, ça fait mieux ici puisque tu changes de menu. Seul défaut, elle ne fonctionne que sous Windows, mais des fonctions équivalentes existent sous les autres OS
           		   	   		  printf ("\t\t====MENU CALCULATRICE====\n\n");        
                       		  printf ("\t1.Addition\n");
                       		  printf ("\t2.Soustraction\n");
                       		  printf ("\t3.Multiplication\n");
                       		  printf ("\t4.Division\n");
                       		  printf ("Ton choix :  ");  
                       		  scanf  ("%ld", &calcul);
                       		  continuer=1;	//On remet la variable à 1 si elle a été mise à 0 dans le default
     
                       		  switch(calcul)	//je pense qu'un switch est préférable à une succession de if ici, mais c'est comme tu veux
                       		  {
    						   		case 1:			
                              		printf ("Cool, t'as choisi l'addition (j'espere que c'est des gros nombre sinon t'es un gros noob ;) )\n");	//Le smiley, c'est juste pour le style!
                              		break;
     
                              		case 2:
    		  	   			  		printf ("Super la soustraction !!\n");
    		  	   			  		break;
     
    		  	   			  		case 3:
    		  	   			  		printf ("Genial la multiplication !!\n");
    		  	   			  		break;
     
    		  	   			  		case 4:
    						  		printf ("Top la divisions!!\n");
    						  		break;
     
    						  		default:	//Toujours prévoir le cas où l'utilisateur ne fait pas ce qu'il devrait faire...
    						  		continuer=0;	//On met la variable à 0: elle empêche de sortir de la boucle. Cette méthode est plus simple que "while(calcul!=1 && calcul!=2 && calcul!=3 && calcul!=4)", puisqu'il suffit juste de vérifier si continuer vaut toujours 1 ou non
    								printf("\aEh! Tu sais pas lire???\n");	//Petite phrase personnalisable, tu t'en doutes
    						  		system("PAUSE");	//Il faut mettre cette fonction ici, sinon l'écran sera effacé au prochain tour de boucle et on ne verra pas le message
    						  		break;
    						  }	//Fin du switch
    					}	//Fin de la boucle
    					while(!continuer);	//Equivalent à "while(continuer==0);"
     
    					//A ce stade là, on a vérifié que l'utilisateur à bien choisi une des quatre propositions
    					//Dans tous les cas, on demande deux chiffres, donc pas la peine de se répéter, on ne le fait qu'une fois
     
    					printf ("\nChoisi le premier nombre : \n");	//C'est plus explicite que "Choisi le nombre 1"
         				scanf ("%ld",&n1);
                        printf ("\nChoisi le deuxieme nombre : \n");	//Idem
                        scanf ("%ld",&n2);
     
                        //Ensuite on refait un switch pour chaque cas, mais sans boucle cette fois
     
                        switch(calcul)
                        {
    			 			  case 1:
    			  	   		  resultat = n1 + n2;
    			  	   		  printf ("\nAtttends je calcule...\n%ld + %ld = %ld \n",n1,n2,resultat);
    						  break;
     
    						  case 2:
    						  resultat = n1 - n2;
                              printf ("\nUne seconde...\n%ld - %ld = %ld \n",n1,n2,resultat);
                              break;
     
                              case 3:
    						  resultat = n1 * n2;
                              printf ("Attends,attend,attend...\n%ld * %ld = %ld \n",n1,n2,resultat);
    						  break;
     
    						  case 4:
                              resultat = n1 / n2;
                              printf ("\n%ld / %ld = %ld \n",n1,n2,resultat);	//Tu n'as pas mis de phrase ici...
                              break;
     
    						  //Ici, pas besoin de default, puisqu'on a déjà contrôlé la valeur de la variable	
    					 }    //Fin du switch 
    					 system("PAUSE");	//Avant d'arriver à la fin de l'application  
    			}	//Fin du if
    		}	//Fin du premier if     
    		//Quoi qu'on fasse, la fin est toujours la même, donc pas besoin de else
    		system("CLS");
            printf("Cette calculette vous a ete presentee par\n\n");
            printf("=:=:=:Xaevaer:=:=:=\n");
            HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);	//Cette fonction est complexe pour un débutant (et n'est pas de moi). Elle sert à modifier la couleur du texte sous windows, ça fait un style!
            SetConsoleTextAttribute(H,15*16+12);
            printf("\t...et remix par Dreamker!\n");
            SetConsoleTextAttribute(H,0*16+15);
            printf("BYYYYYYYYYYYE ^^\n\n\n\n");
     
    		system("PAUSE");
     
    return EXIT_SUCCESS;	//Je préfère EXIT_SUCCESS à 0, mais en fait... on s'en fout!
    }  
     
    //Et c'est fini!
    //Améliorations:
    //Si tu as essayé d'entrer d'autre chose que des chiffres, il risque d'y avoir un problème. Il faut donc que tu utilises la fonction fgets() plutôt que scanf()
    //Tu pourrais mettre une boucle dès le début pour demander si on veut faire un autre calcul
    //Tu pourrais vérifier la valeur de n2 dans le cas de la division: il faut qu'il soit différent de 0!
    //Tu pourrais utiliser la librairie mathématique math.h, qui t'apportes des fonctions intéressantes pour une calculatrice: racines carrées,...
    //Améliore l'esthétique, il en a bien besoin!
    //Euh... ce sera déjà pas mal!
     
    //Bonne continuation!
    //Dreamker ;)

  4. #4
    Membre chevronné Avatar de aziz jim
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 455
    Par défaut
    A première vue, le choix de do...while() n'est pas bon.

    parce que même si l'utilisateur va choisir de quitter l'application, le programme va continuer l'exécution de ce qui se trouve à l'intérieur de la boucle :
    avec le do...while() on exécute d'abord et on vérifie ensuite.

    un simple if sera mieux.

  5. #5
    Invité
    Invité(e)
    Par défaut Non, le code est bon!
    Non, non, regarde mieux le code:
    On entre dans la boucle uniquement pour répéter le menu jusqu'à ce que la variable ait une valeur correcte. Mais si on demande dès le début de quitter, alors on entre pas dans le premier if (puisque choix!=1), ou si on met qu'on ne veut pas faire de calcul, on entre pas dans le deuxième if (puisque choix1!=1). Donc, si on veut quitter, on n'entre dans aucun if, ou dans un seul (j'ai gardé le système original où on peut choisir de quitter le programme deux fois en fonction de la valeur de choix et choix1, bien que je trouve ça un peu... redondant!) seulement, et donc pas dans la boucle non plus, et on va directement à la fin du programme!
    Essaye de compiler, tu verras que ça marche parfaitement!
    Au fait Xaevar, je viens de remarquer que tu avais posté ton message dans le forum de Devcpp, mais ça n'a rien à voir: si tu avais essayé de compiler sous n'importe quel IDE, tu aurais eu le même problème. C'est seulement une question de syntaxe de code, et de code en lui-même.
    @+

  6. #6
    Membre chevronné Avatar de aziz jim
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 455
    Par défaut
    C'est pas à toi que je m'adressais Dreamker. je suis pas si aveugle que ça..

  7. #7
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2
    Par défaut merci
    Merci vous qui avez vu mes erreur et dreamker je vais essayé de suivre tes conseil.
    Je suis juste debutant donc je connaisais pas SYSTEM(CLS) je m'endormirai moin *** ce soir ^^

Discussions similaires

  1. innerHTML qui bug sous IE
    Par krolineeee dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/06/2006, 16h28
  2. [Ouverture fichier] Chemin qui bug !
    Par nebule dans le forum Langage
    Réponses: 15
    Dernier message: 18/05/2006, 09h59
  3. calculette qui calcule pas (aide svp)
    Par samy100 dans le forum C
    Réponses: 37
    Dernier message: 28/04/2006, 04h19
  4. [2.0] Get sur une variable d'application qui bug ??
    Par brousaille dans le forum ASP.NET
    Réponses: 8
    Dernier message: 14/03/2006, 05h08
  5. [RCP]tuto Ibm qui bug
    Par sglug dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 03/10/2005, 15h11

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