Programmer une calculatrice

Pkavalier Messages postés 8 Date d'inscription vendredi 9 décembre 2022 Statut Membre Dernière intervention 19 mai 2023 - Modifié le 7 juin 2023 à 12:38
mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 - 7 juin 2023 à 12:50

Bonjour les génies.

Je viens vous demander de l'aide. Je veux écrire un programme qui permet à l'utilisateur de revenir au Menu principal après chaque opération de calcul. 

Quelle structure de contrôle dois-je utiliser et comment ?????

Je travaille en langage C. Voici mon code :

int main(){
  int a,b;
  int somme, diff;
  int choix ;
  printf("Menu principal \n");
  printf("1--- Addition \n");
  printf("2--- Soustraction \n");
  printf("Choisissez une opération : ");
  scanf("%d", &choix);
  switch(choix){ 
       case 1 :
          printf("saisissez les nombres : ");
          scanf("%d %d", &a, &b);
          somme = a + b;
          printf("la somme est : %d \n", somme");

          // Quelle structure ou fonction dois-je utiliser ici ?
          // Ici je veux donner le choix à l'utilisateur de retourner au Menu principal
          // sans fermer le programme ?
          break;
       // ...
  }
  return 0;
}

A voir également:

5 réponses

Alors, je reviens de l'au-delà ...
Voici un code très minimal dans lequel je ne fais aucune validation. Il y a de multiples façons d'améliorer ce code.
C'est tout de même la bonne façon d'implémenter une calculatrice.
 

#include <stdio.h>

int main() {
    int operateur;   // Code de l'opérateur.
    int accumulateur = 0;   // Accumulateur
    while(1) {   // Boucle infinie
        printf("Menu:\n1. Addition\n2. Soustraction\n> ");
        scanf("%d", &operateur);
        int nombre;
        switch(operateur) {
            case 1:
                printf("Entrez le nombre à additionner ");
                scanf("%d", &nombre);
                accumulateur += nombre;
                break;
            case 2:
                printf("Entrez le nombre à soustraire ");
                scanf("%d", &nombre);
                accumulateur -= nombre;
                break;
        }
        printf("Accumulateur: %d\n", accumulateur);
    }
}
2
Pkavalier Messages postés 8 Date d'inscription vendredi 9 décembre 2022 Statut Membre Dernière intervention 19 mai 2023 1
19 mai 2023 à 19:25

Vous êtes là ?


0

On n'est pas forcément là ! Place tout ton code (menu + switch) dans une boucle while par exemple.

while(...) {
    // menu
    // validation si requis
    switch(...) {
        case 1: // pour l'addition
            break;
        case 2: // pour la soustraction
            break;
    }
}
0
Pkavalier Messages postés 8 Date d'inscription vendredi 9 décembre 2022 Statut Membre Dernière intervention 19 mai 2023 1
19 mai 2023 à 19:46

Je vous présente toutes mes excuses. J'ai cliqué sur le l'option "Résolu" sans me rendre compte. 


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 7 752
7 juin 2023 à 12:50

Bonjour,

J'ai un peu nettoyé le fil de discussion et je pense que la réponse #8 de Pierrot répond à la question initiale.

@Pkavalier StatutMembre si tu as besoin de précisions, merci de les demander dans ce même fil de discussion. Dans le doute, je le bascule en résolu.

Si tu veux aller plus loin, il est possible de saisir directement un calcul complet et parenthésé en tenant compte de le cardinalité, de la priorité et de l'associativité de chaque opérateur. Pour cela, on utilise typiquement l'algorithme de Shunting Yard.

Bonne continuation

0