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 :

Basic calculator [Débutant(e)]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 21
    Par défaut Basic calculator
    salut à tous
    J'ai fait ce petit programme qui s'appelle Basic calculator et je souhaiterais avoir votre avis le code source, et d'éventuelle suggestions pour fixer les bugs.
    merci d'avance
    url : http://beat.byethost13.com/unix/linux.html
    Au fait je suis Beat

    Edit de Gruik : je poste ici, il est pas gros
    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
    #include<stdio.h>
     
    /*
    *Name : calculator.c
     * Vertion : 0.1
     * Author : Beat
     * 14-sep-2007
     * Description : This application is a basic calculator.
     * 		 It has another interesting feature : print multiplication table accordin to user input.
     * 		 Operators used to perform operations are :
     * 		 + addition
     * 		 - subtraction
     * 		 * multiplication
     *		 / division
     *
     *		 Type -help to see how program works.
     *
     *
     */
     
    int calculate(void);
    int help(void);
    int table(void);
     
    int main()
    {	
    	printf("\t\t\t   -------------------   \n");
    	printf("\t\t\t  |  Basic Calculator |  \n");
    	printf("\t\t\t   -------------------   \n");
    	printf("\t\t\t    | Coded by Beat |    \n");
    	printf("\t\t\t     ---------------     \n");
    	printf("\t\t\t         Usage :         \n");
    	printf("\t\t\t         -------       \n\n");
    	printf("\th --help            ->  shows how program works\n\tt --table           ->  prints multiplication table of a number\n\tc --calculate       ->  switch to basic calculating\n\tq --quit            ->  To exit program\n\n\n");
     
    	char choice;
    	printf("Menu >");
    	while(choice != 'q')
    	{
     
    		scanf("%c", &choice);
     
     
    		if(choice == 'h')		
    		{	 help();} 
    		else if(choice == 't')
    		{	 table();}
    		else if(choice == 'c')
    		{	 calculate();}
    		else
    		{	printf("Menu >");}
     
     
     
    	}
     
    	printf("\n\n\n\t\t\tBye ------------------>See you soon !\n\n\n");	
     
     
     
    return 0;
    }
     
    int calculate(void)
    {	
    	double i = 0, j = 0;
    	char operator;
    	printf("Calculator >");
    	scanf("%lf %c %lf", &i, &operator, &j);
     
    	switch(operator)
    	{	
    		case '+': printf("Result is -> %lf\n", i+j);
    			  break;
    		case '-': printf("Result is -> %lf\n", i-j);
    			  break;
    		case '*': printf("Result is -> %lf\n", i*j);
    			  break;
    		case '/': printf("Result is -> %lf\n", i/j);
    			  break;
    		default : printf("Bad syntax ! type h for more information");
    	}
    return 0;
    }
     
     
    int table(void)
    {	
    	int i = 0, j = 1, k;
     
    	printf("Multiplication Table >");
    	scanf("%d", &i);
    	while(j<11)
    	{	
    		k = j*i;
    		printf("%d x %d = %d\n", j, i, k);
    		j++;
    	}
    return 0;
    }
     
    int help()
    {	printf("\t\t\t\t\t\t| help |\n");
    	printf("\t\t\t\tBasic calculator is, as it's name tells,\n\t\t\t\ta program alowing to do some basic calculations\n\n\n");
    	printf("\t-c : This command switchs to calculate mode. type 1st number <space> operator <space> 2nd number.\n              Existing operators : +  *  /  - for addition, multiplication, division and substraction.\n\n");
    	printf("\t-t : Shows multiplication table of an number. Just type the number and press Enter.\n\n");
     
    return 0;
    }

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Tu ne contrôles pas la valeur de retour de scanf. Par définition, l'utilisateur peut faire n'importe quoi et s'il peut faire n'importe quoi ton programme aussi.
    Tu trouveras de l'aide sur scanf ici http://xrenault.developpez.com/tutoriels/c/scanf/.

    Autrement, tu peux utiliser fgets et analyser la chaîne récupérée.
    http://c.developpez.com/faq/c/?page=...EEN_gets_fgets

    Tu trouveras beaucoup de discussions sur le sujet dans le forum.
    Autrement, je n'aime pas les lignes qui font un kilomètre de long.

  3. #3
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    • choice n'est pas initialisé
    • tu peux utiliser la structure switch pour tester des cas dont la valeur est une constante entiere (c'est le cas pour des constantes caracteres comme 'h', 't'...)
    • int help() n'est pas un prototype correct
    • j'aurais plutot utilisé un for qu'un while pour la table de multiplication
    • je n'aime pas trop ton style de bloc d'instruction tout sur une ligne, il est plus courant de voir ceci
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      {
         code();
         code();
      }

  4. #4
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    En complement des remarques qui ont deja ete faites:
    * les affichages du type printf("Menu >"); n'etant pas termine par un \n, l'affichage peut ne pas etre fait immediatement. Rajoutes un fflush(stdout).
    *En plus de tester le retour de scanf comme l'indique aoyou, il est imperatif de vider le tampon d'entree pour ne pas pertube les saisies suivantes (sujet maintes fois aborde sur le forum, fait une recherche sur fclean).

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par gl Voir le message
    *En plus de tester le retour de scanf comme l'indique aoyou, il est imperatif de vider le tampon d'entree pour ne pas pertube les saisies suivantes (sujet maintes fois aborde sur le forum, fait une recherche sur fclean).
    ... quand c'est nécessaire...

  6. #6
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    ... quand c'est nécessaire...
    Certes, ça me semblait suffisamment évident pour le sous entendre. Mais c'est effectivement préférable de le préciser.

Discussions similaires

  1. [Débutant] Calcul des valeurs des TextBox en Visual basic 2010
    Par stracoma dans le forum VB.NET
    Réponses: 2
    Dernier message: 14/09/2014, 21h52
  2. anomalie de calcul basic
    Par DNB91 dans le forum Excel
    Réponses: 3
    Dernier message: 27/04/2012, 09h16
  3. Calcul percentile et centile avec Visual Basic 6.0
    Par moirs555 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 22/08/2011, 14h24
  4. [OpenOffice][Tableur] [Tableur] + [BASIC] Bouton sur Feuille de calcul
    Par Totanne dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 29/10/2010, 10h01
  5. Calcul Astronomique en visual basic
    Par Emanuel Boivin dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 17/03/2009, 23h56

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