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

VB.NET Discussion :

Mon code VB n'accepte pas "or" [Débutant]


Sujet :

VB.NET

  1. #1
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut Mon code VB n'accepte pas "or"
    Mes chers amis bonsoir, j'ai besoin de votre aide.

    Je ne sais pas pourquoi ce code n’accepte pas "or"
    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
    Module Module1
     
        Sub Main()
            Console.WriteLine("entrer le premier nombre")
            Dim pnombre As Integer = Console.ReadLine()
            Console.WriteLine("entrer le second nombre")
            Dim dnombre As Integer = Console.ReadLine()
            Console.WriteLine("Quelle opération voulez vous faire? ")
            Dim R As Char = ""
            Console.WriteLine("si addition tapez 'A'")
            Console.WriteLine("si soustraction tapez 'S'")
            Console.WriteLine("si mustiplication tapez 'M'")
            Console.WriteLine("si division tapez 'D'")
            R = Console.ReadLine()
            If R = "A" Or "a" Then
                plus(pnombre, dnombre)
            ElseIf R = "S" Or "s" Then
                mois(pnombre, dnombre)
            ElseIf R = "M" Or "m" Then
                fois(pnombre, dnombre)
            ElseIf R = "D" Or "d" Then
                division(pnombre, dnombre)
            End If
            Console.ReadKey()
        End Sub
        Sub plus(ByVal nombre1 As Integer, ByVal nombre2 As Integer)
            Console.WriteLine(nombre1 + nombre2)
        End Sub
        Sub mois(ByVal nombre1 As Integer, ByVal nombre2 As Integer)
            Console.WriteLine(nombre1 - nombre2)
        End Sub
        Sub fois(ByVal nombre1 As Integer, ByVal nombre2 As Integer)
            Console.WriteLine(nombre1 * nombre2)
        End Sub
        Sub division(ByVal nombre1 As Integer, ByVal nombre2 As Integer)
            Console.WriteLine(nombre1 / nombre2)
        End Sub
     
    End Module
    il me donne comme message:La conversion de la chaîne "a" en type 'Boolean' n'est pas valide.
    J'apprends la programmation pour le plaisir

  2. #2
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    o_O...... il faut revoir la table de vérité pour comprendre ta grossière erreur !!




    Pour corriger ton problème il faut que tu ré-évalues ta condition pour "a" c'est à dire comme ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            R = Console.ReadLine()
            If R = "A" Or R = "a" Then
                plus(pnombre, dnombre)
            ElseIf R = "S" Or R = "s" Then
                mois(pnombre, dnombre)
            ElseIf R = "M" Or R = "m" Then
                fois(pnombre, dnombre)
            ElseIf R = "D" Or R = "d" Then
                division(pnombre, dnombre)
            End If
            Console.ReadKey()


    Bonne lecture.
    A+

  3. #3
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Une autre approche dites du "éviter de se prendre la tête pour rien" ; serait de faire en sorte de n'avoir pas à utiliser de Or, pour cela plusieurs méthodes :

    convertir la lecture en "tout minuscule" ou "tout majuscule" comme ça on teste directement en minuscule ou en majuscule
    utiliser une méthode de comparaison insensible à la casse (= le fait que ce soit en minuscule ou en majuscule)
    utiliser l'opérateur like en lui passant une classe de caractère contenant les 2 possibilités (minuscules et majuscules) [là c'est déjà plus du bricolage par rapport aux 2 première]
    etc.
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  4. #4
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut OR
    wallace1, merci beaucoup;
    c'est l'erreur de débutant
    Maintenant ça marche Nickel
    Merciiiiiiiii
    J'apprends la programmation pour le plaisir

  5. #5
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par stracoma Voir le message
    wallace1, merci beaucoup;
    c'est l'erreur de débutant
    Maintenant ça marche Nickel
    Merciiiiiiiii
    Je souhaitais resté dans ton contexte mais il est clair que l'approche d'ami Sehnsucht est bien moins prise de tête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            R = Console.ReadLine()
            If R.ToLower = "a" Then
                plus(pnombre, dnombre)
            If R.ToLower = "s" Then
                mois(pnombre, dnombre)
            End If
    A+

  6. #6
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Sehnsucht
    Effectivement c'est plus pratique de mettre toute la saisie en majuscule ou miniscule, mais étant débutant j'explore toutes les pistes.
    Mais opérateur Like, je connais pas (j'y arriverai dans le tuto)
    Merci
    J'apprends la programmation pour le plaisir

  7. #7
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    @wallace1:
    Dans ce cas, de 2 choses l'une, soit tu appliques directement le .ToLower (ToLowerInvariant serait sans doute mieux même) sur le Console.ReadLine histoire de pas le faire 50 fois (bien sûr si on doit conserver la valeur initiale avec sa casse là, c'est pas la bonne approche) ; soit utilises un Select Case au lieu d'un enchainement de If ou de If/Else If (dans un Select Case, le "critère" n'est évalué qu'une seule fois )
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  8. #8
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    C'est bien ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     R = Console.ReadLine().ToLower
            Select Case R
                Case "a"
                    plus(pnombre, dnombre)
                Case "s"
                    mois(pnombre, dnombre)
                Case "m"
                    fois(pnombre, dnombre)
                Case "d"
                    division(pnombre, dnombre)
            End Select
    J'avance, merci à vous
    J'apprends la programmation pour le plaisir

  9. #9
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Mon cher wallace1, en voulant explorer toutes les possibilités, j'ai essayé la méthode que vous avez proposée, mais ça ne marche pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     R = Console.ReadLine()
            If R.ToLower = "a" Then
                plus(pnombre, dnombre)
            ElseIf R.ToLower = "s" Then
                mois(pnombre, dnombre)
            ElseIf R.ToLower = "m" Then
                fois(pnombre, dnombre)
            ElseIf R.ToLower = "d" Then
                division(pnombre, dnombre)
            End If
    il donne le message: la résolution de surcharge a échoué, car aucun "ToLower"accessible n’accepte ce nombre d'arguments
    J'apprends la programmation pour le plaisir

  10. #10
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    @Sehnsucht : A cette heure ci faut pas trop m'en demander.....
    @Stracoma : le principal étant l'exploration de plusieurs solutions et de choisir celle qui te corresponds le mieux moyennant quelques ajustements

    Sur ce bonne nuit.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Aucune
    Inscrit en
    Mars 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune

    Informations forums :
    Inscription : Mars 2014
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Bonjour stracoma

    Ta variable R serais pas numérique par hasard (Char = Un caractère mais c'est une valeur numérique non ?) ?
    Met ta variable R en string plutôt

    Sinon, j'ai rien dis ^^

  12. #12
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Bonjour Lord-Nelson, votre remarque est juste. En changeant char par string, il n'y a plus d'erreur.
    Donc le char est pris par le programme pour une valeur numérique.
    Une épine retirée
    merci
    J'apprends la programmation pour le plaisir

  13. #13
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    @Lord - Nelson
    Non, R est de type Char (il n'est pas difficile de consulter la doc)

    Le problème vient de la conversion implicite, il suffit de mettre Option Stric On.
    Avec la déclaration Dim R As Char R devrait être traité ainsi Char.ToLower(R) pour être correctement utilisé.
    Mais en fait, ici cette variable n'est même pas utile, on peut traiter directement l'entrée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select Case Console.ReadLine().ToLower
                Case "a"
                    plus(pnombre, dnombre)
                Case "s"
    '...
    Avec l'option Option Stric On, on verra aussi les conversions implicites qui ne seront plus acceptées :
    Dim pnombre As Integer = Console.ReadLine() integer - string
    Dim R As Char = "" char - string
    Par contre ici If R.ToLower = "a" Then l'erreur était visible directement : méthode de la classe string appliquée sur un type Char.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mon code behind n'est pas exécuté sous Visual Web
    Par mourmaux dans le forum ASP.NET
    Réponses: 2
    Dernier message: 25/09/2008, 19h07
  2. [Smarty] Mon code PHP n'est pas interprété
    Par dorian53 dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 17/12/2007, 15h49
  3. Mon code ne s'éxécute pas
    Par krfa1 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/10/2005, 10h49

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