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 :

[débutant] sortir d'une fonction sans donner de resultat


Sujet :

C#

  1. #1
    Membre du Club Avatar de CompuTux
    Homme Profil pro
    Développeur Python et Django
    Inscrit en
    Juillet 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Python et Django
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 82
    Points : 68
    Points
    68
    Par défaut [débutant] sortir d'une fonction sans donner de resultat
    Bonjour,

    Dans une application console, je dois implémenter une sorte de menu càd choisir entre 4 carburants en tapant 1 pour le carburant 1, 2 pour le 2ème, etc.

    Je considère l'utilisateur non intelligent càd qu'il peut taper 5 ou 56,45745745 pour choisir le carburant. J'aimerais donc que mon programme revienne au menu de choix du carburant lorsque l'on tape n'importe quoi.

    Mon code est :

    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
    // définition de la fonction choix du prix du carburant
     
            public static double prix_carburant(int choix_carburant)
            {
                double prix; 
     
                if (choix_carburant == 1)
                {
                    prix = 1.309;
                    return prix;
                }
                else if (choix_carburant == 2)
                {
                    prix = 1.287;
                    return prix;
                }
                else if (choix_carburant == 3)
                {
                    prix = 1.049;
                    return prix;
                }
                else 
                {
                    prix = 0.57;
                    return prix;
                }
     
            }
    Pour l'instant le prix du carburant est 0,57 losque l'on tape autre chose que 1 ou 2 ou 3.

    J'ai essayé avec un Environnement.Exit() mais ça ne marche pas.

    Quelqu'un peut-il m'aider svp ?

  2. #2
    Membre confirmé
    Avatar de teddyalbina
    Homme Profil pro
    Développeur .Net,C++
    Inscrit en
    Janvier 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .Net,C++

    Informations forums :
    Inscription : Janvier 2008
    Messages : 466
    Points : 568
    Points
    568
    Par défaut
    Pour pour commencer un peu de ménage dans ton code
    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
     
     
    // définition de la fonction choix du prix du carburant
     
            public static double prix_carburant(int choix_carburant)
            {
                double prix;
                switch(choix_carburant)
                {
                      case 1:
                        prix = 1.309;
                        break;
                      case 2:
                        prix = 1.287;
                        break;
                      case 3:
                        prix = 1.049;
                        break;
                      default:           
                        prix = -1; // erreur de frapppe         
                        break;
                }
                return prix;       
            }

    Pour alors ici utilise plutot un switch. Pour le reste tu test chacun des cas prévu, si l'entrée choix_carburant ne correspond pas le switch saute à default: ici j'ai mis -1 qui te permettra de savoir qu'une erreur de frappe a eu lieu

  3. #3
    Membre du Club Avatar de CompuTux
    Homme Profil pro
    Développeur Python et Django
    Inscrit en
    Juillet 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Python et Django
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 82
    Points : 68
    Points
    68
    Par défaut
    Le prof veut qu'on utilise uniquement les conditionnels if else. Dans ce cas comment faire ?

  4. #4
    Membre confirmé
    Avatar de teddyalbina
    Homme Profil pro
    Développeur .Net,C++
    Inscrit en
    Janvier 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .Net,C++

    Informations forums :
    Inscription : Janvier 2008
    Messages : 466
    Points : 568
    Points
    568
    Par défaut
    Ton prof est relou
    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
     
     
    // définition de la fonction choix du prix du carburant
     
            public static double prix_carburant(int choix_carburant)
            {
                double prix;
     
                if (choix_carburant == 1)
                    prix = 1.309;
                else if (choix_carburant == 2)
                    prix = 1.287;
                else if (choix_carburant == 3)
                    prix = 1.049;
                else 
                    prix = -1; // problème
     
                return prix;
            }

    Evite autant que possible de mettre des return dans tout les sens, parce que ça donne mal au crâne

  5. #5
    Membre du Club Avatar de CompuTux
    Homme Profil pro
    Développeur Python et Django
    Inscrit en
    Juillet 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Python et Django
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 82
    Points : 68
    Points
    68
    Par défaut
    Merci teddyalbina !

    Est il possible de mettre une phrase comme "Votre choix est incorrect ! Veuillez rechoisir :" et faire recommencer la fonction prix_carburant au début ?

    Genre avec un goto... ça existe ?

  6. #6
    Membre confirmé
    Avatar de teddyalbina
    Homme Profil pro
    Développeur .Net,C++
    Inscrit en
    Janvier 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .Net,C++

    Informations forums :
    Inscription : Janvier 2008
    Messages : 466
    Points : 568
    Points
    568
    Par défaut
    OUlala non pas de GOTO oublie de suite.

    Ce qu'il te faut c'est boucler tant que la condition prix != -1 n'est pas remplie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TANT QUE prix == -1
       AFFICHER MESSAGE
       RECUPERER SAISIE UTILISATEUR
          prix = prix_carburant(SAISIE);
    FIN TANT QUE

  7. #7
    Membre du Club Avatar de CompuTux
    Homme Profil pro
    Développeur Python et Django
    Inscrit en
    Juillet 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Python et Django
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 82
    Points : 68
    Points
    68
    Par défaut
    Merci² !

    Par curiosité : pourquoi surtout pas de GOTO ? ??

  8. #8
    Membre confirmé
    Avatar de teddyalbina
    Homme Profil pro
    Développeur .Net,C++
    Inscrit en
    Janvier 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .Net,C++

    Informations forums :
    Inscription : Janvier 2008
    Messages : 466
    Points : 568
    Points
    568
    Par défaut
    C'est une façon de faire à la C qui est crade qui fais faire des choses étranges à ton code parce que sauter d'un point à l'autre c'est pas très carré .

    Utilse toujours des boucles etc... mais pas de goto

  9. #9
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Citation Envoyé par teddyalbina Voir le message
    Ton prof est relou
    Si c'est pour l'experience academique du else if je peux peut-etre comprendre....

    Mais pour ma part, j'ai toujours trouvé que les cascade de else if etaient un piege pour la compréhension logique car souvent au bout du 3eme else if on a du mal a savoir d'ou on vient et le chemin eventuel qui reste a parcourir

    Dans ton cas effectivement le switch case serait plus approprié et plus lisible

    Ou meme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (condition a)
    {
      // traitement 
      return;
    }
    if (condition b)
    {
      // traitement 
      return;
    }

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Points : 122
    Points
    122
    Par défaut
    Citation Envoyé par olibara Voir le message
    Si c'est pour l'experience academique du else if je peux peut-etre comprendre....

    Mais pour ma part, j'ai toujours trouvé que les cascade de else if etaient un piege pour la compréhension logique car souvent au bout du 3eme else if on a du mal a savoir d'ou on vient et le chemin eventuel qui reste a parcourir

    Dans ton cas effectivement le switch case serait plus approprié et plus lisible

    Ou meme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (condition a)
    {
      // traitement 
      return;
    }
    if (condition b)
    {
      // traitement 
      return;
    }
    Je partage cet avis.

    Le param de fonction ne devrait pas être int mais une énumeration de Carburant. Et aucun prix n'existe sans devise.

    Si input est invalide il faut "lancer" une exception (ArgumentException ?).

    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
     
    // Generalement on travaille en unité indivisible de la devise
    // car _amount reste entier et on a pas d'arrondis et plus
    class Price{ int _amout; Devise _devise; ...
     
    Price PrixCarburant(Carburant carburant)
    {
     
    if( Carburant.SansPlomb95 == carburant)
    return( new Price(1.095, Devise.Euro) );
     
    ...
    // connait pas ce carburant
    throw new ArgumentException("carburant non pris en charge", "carburant");
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void Main(...
    {
    try
    {
    ...
    }
    catch(ArgumentException ex)
    {
     ... //Saisie incorrecte
    }
    }
    et une classe carburant ?

    Pascal

  11. #11
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Citation Envoyé par realpasso Voir le message
    Le param de fonction ne devrait pas être int mais une énumeration de Carburant. Et aucun prix n'existe sans devise.

    Si input est invalide il faut "lancer" une exception (ArgumentException ?).

    et une classe carburant ?

    Pascal
    frenchem67 a mis un tag [débutant] dans son sujet. De plus, compte tenu du fait qu'il est contraint d'utiliser des blocs conditionnels, on peut facilement en déduire qu'il s'agit d'un exercice visant à faire comprendre ces blocs et non pas mettant l'accent sur des problématiques de conception Chaque chose en son temps... Et puis que ce soit les autodidactes ou ceux qui sont allés à l'école, on est tous passés par là

    A part ça, je plussoie, les GOTO c'est le mal

    Bon courage

Discussions similaires

  1. Sortir d'une fonction sans recharger la page
    Par alfouine dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 10/03/2011, 11h36
  2. Lancer une fonction sans widget ( débutant )
    Par LM_programme dans le forum GTK+
    Réponses: 5
    Dernier message: 17/03/2010, 13h07
  3. Comment sortir d'une fonction sans nom ?
    Par kriekbellevue dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/11/2007, 15h00
  4. Création d'une fonction sans paramètre?
    Par falcon dans le forum Oracle
    Réponses: 3
    Dernier message: 13/12/2004, 11h32
  5. [Threads] Sortir d'une fonction bloquante
    Par guejo dans le forum MFC
    Réponses: 19
    Dernier message: 17/08/2004, 14h12

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