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 :

les switch ?


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 152
    Par défaut les switch ?
    Bonjour, je suis nouveau,

    Je voudrais comprendre pourquoi chez moi le switch ne marche pas. Doit-on inclure un .h bien particulier bien que je pense qu'il soit dans ceux par defaut.

    Erreur: "switch" ???

    Il n'a pas l'air de le reconnaître

    Code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    switch (directoryName)
    {
      case "help" : cout << "Demande d'aide"; goto start; break;
      case "quit" : cout << "Sortie..."; break;
    }
    La variable directoryName est un char initialisé précédemment dans le code et est affecté par un cin.getline().

    Merci d'avance

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2004
    Messages : 3
    Par défaut
    si tu compile avec boreland il me semble que switch est dans la lib. par defaut .... alors ton prob est peut-etre quil te manque une variable defaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    default:cout<<"cest bon les patates"

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 152
    Par défaut
    Non car il se trouve que j'ai déjà mis avant un cout.
    Regarde plutôt tout le code alors

    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
    #include <stdlib.h>
    #include <iostream>
    using namespace std;
     
    int main()
    {
    char directoryName[255];
     
    start:
     
    cout << "Tape le nom de l'application a lancer:";
    cin.ignore(1,'\n');
    cin.getline(directoryName,255);
     
     
    switch (directoryName)
    {
      case "help" : cout << "Demande d'aide"; goto start; break;
      case "quit" : cout << "Sortie..."; break;
    }
     
    return 0;
    }

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Relis bien le message d'erreur que ce bout de code te génère. Il doit te dire un truc du style que tu n'utilises pas un "type intégral". Soit, le switch ne marche qu'avec des choses qui peuvent être implicitement converties en entiers.
    Or toi, tu utilises des pointeurs...

    Bref, la façon typique est d'utiliser des "if() {} else if(){} else if() {} ... else {}" ou des tableaux associatifs.
    Autres solutions : utiiser des biblios dédiés à la gestion des paramètres. En C, on a getopt ; en C++ on va bientôt avoir boost::options (dispo sur le CVS en attendant).

    Autres conseils :
    - oublie goto, utilise while et fais des fonctions.
    - utilise des std::string plutôt que des tableaux statiques

    Enfin, swith(){} n'a rien à voir avec une quelconque lib, il s'agit d'un mot clé standard du C++.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 152
    Par défaut
    désolé mais je comprend pas tout... directoryName n'est pas un pointeur... donc explique...
    J'utilise Dev-C++ et les erreurs retournées sont

    "/Documents and Settings/Axel/Mes documents/Cpp projets/SansNom2.cpp C:\Documents and Settings\Axel\Mes documents\Cpp projets\C In"
    et
    "16 C:\Documents and Settings\Axel\Mes documents\Cpp projets\SansNom2.cpp switch"

    J'ai essayer un code d'un post avec un switch et il me retournais l'erreur "switch" de nouveau.

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Tu utilises des tableaux statiques qui sont implicitement convertis en pointeurs et non en entiers. "help" est tout sauf un entier. Or switch n'accepte que des entiers => c'est complètement innapproprié pour ce que tu veux faire. Tu peux tourner le problème dans tous les sens, tu n'arriveras pas à utiliser switch pour ton problème.

    Quant au message d'erreur, il m'a tout l'air d'être incomplet. Lis les lignes qui suivent. Cela confirmera ce que je te dis.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 152
    Par défaut
    Citation Envoyé par Loulou24
    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
    #include <iostream> 
     
    using namespace std; 
     
    int main() 
    { 
        // Initialisations... 
     
        switch (Devise) 
        { 
            case 'D' : MontantConverti = MontantCanadien / DOLLAR; break; 
            case 'E' : MontantConverti = MontantCanadien / EURO;   break; 
            // etc... 
        } 
     
        cout << MontantConverti << endl; 
     
        return 0; 
    }
    http://www.developpez.net/forums/vie...301625#1301625

    C'est forme ne marche pas chez moi est-ce normale ?

    Et pour le message d'erreur il n'y a pas de suite.

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ce code est incomplet, en l'occurence aucune variable n'est déclarée. Il n'est pas censé compiler tel quel.

    Le message d'erreur a sûrement une suite, sinon ça ne voudrait rien dire ; les gens qui ne connaissent pas bien les IDE à base de gcc se font souvent avoir

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 152
    Par défaut
    Pour le message d'erreur il fallait regarder dans le log du compilateur

    In function `int main()':
    switch quantity not an integer

    Et pour ton code Loulou j'avais remplacer la variable Devise par directoryName celle que je voulais contrôler et toujours cette erreur à cause que c'est pas un entier, merci j'ai compris maintenant. Donc je vais faire comme Luc Hermitte m'a dit et utiliser des bons vieux if

  10. #10
    Membre éprouvé Avatar de PINGOUIN_GEANT
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 149
    Par défaut
    ils ont déjà répondu mieux que je le ferais pour élucider ton problème mais j'aimerais ajouter que pour comparer des chaînes de caractères tu as besoin de strcmp (en C) et donc ceci marche (comparaison caractères),
    mais pas ta comparaison.

  11. #11
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    D'où l'intérêt d'utiliser des std::string
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 152
    Par défaut
    et comme std::cout, à quoi sert std::string. je sais que je suis nouveau :>

  13. #13
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    std::string sert à manipuler les chaînes de caractères avec une syntaxe plus intuitive que pour les tableaux de caractères style C, sans se soucier de la gestion de la mémoire qui va avec, et offre beaucoup plus de fonctionnalités.
    En l'occurence pour ton problème ça te permettra par exemple de comparer tes chaînes avec l'opérateur == plutôt que strcmp().

    Une p'tite référence pour te faire une idée : http://www.sgi.com/tech/stl/basic_string.html

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 93
    Par défaut
    std::cout sert a afficher à l'ecran
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    std::cout<<variable<<std::endl;
    std::cout<<"un texte"<<std::endl;
    //apres tu peux mixé
    std::cout<<"un texte "<<variable<<"texte2"<<std::endl;
    quant aux string c'est un type définie dans la STL pour facilité la manipulation de chaine de caractere.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 152
    Par défaut
    Merci et la dernière chose

    Avec std::string c'est quoi la commande pour que je puisse la vérifier avec un if ?

  16. #16
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Je suppose que tu veux dire par là "la comparer à une autre chaîne de caractère" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    std::string chaine = "toto";
     
    if (chaine == "titi")
       BlahBlah();
    else if (chaine == "toto")
       CoinCoin();
    else if (chaine == "tutu")
       MeuhMeuh();

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 152
    Par défaut
    Ah voilà merci j'ai compris

    Merci, pour vos aides soutenues :>

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

Discussions similaires

  1. Réseau d'entreprise : Gestion des n° sur les switch
    Par snoopy69 dans le forum Windows XP
    Réponses: 1
    Dernier message: 24/04/2007, 11h16
  2. [Débutant] Aide avec les Switch
    Par ggcourtois dans le forum C++
    Réponses: 30
    Dernier message: 01/08/2006, 12h20
  3. [Tableaux] Probleme avec les switch
    Par grumly22 dans le forum Langage
    Réponses: 9
    Dernier message: 10/04/2006, 10h51
  4. exercice c probleme sur les switch
    Par john93 dans le forum C
    Réponses: 7
    Dernier message: 14/01/2006, 09h53
  5. [Language] aide sur les switch case
    Par pouss dans le forum Langage
    Réponses: 3
    Dernier message: 05/04/2005, 11h34

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