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 :

c++.debutant confus: ligne de commandes


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 54
    Par défaut c++.debutant confus: ligne de commandes
    Salut!

    J'ai un code qui fait quelque chose si le parametre de ligne de commande est
    "-c"

    if(argc==2 && strcmp(argv[1], "-c") )




    else if(argc==2 && strcmp(argv[1], "-a") )
    {
    cout << "blabla";
    }


    or, quand je lance monprogramme en nom.exe-c il mecrit blabla, et en nom.exe -a il me fait le code du -c....


    comprends plus rien!!
    Est ce que cette ligne a l'air fausse?

    if(argc==2 && strcmp(argv[1], "-c") )

    merci!

  2. #2
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    je crois que strcmp ne vérifie pas si elle sont égales mais donne un chiffre qui donne la différence entre les deux chaines. Fais juste dans le doute:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if(argc==2 && argv[1][0]== "-" && argv[1][1] == "c" )
    Après moi aussi je débute donc si quelqu'un peut apporter des explications sur strcmp alors bienvenue.

    Peut-être qu'on peut même faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(argc==2 && argv[1]== "-c")

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par défaut
    Citation Envoyé par corseb
    Est ce que cette ligne a l'air fausse?

    if(argc==2 && strcmp(argv[1], "-c") )
    Oui : strcmp renvoit 0 si ses deux arguments sont égaux et ce 0 est converti en booléen false.

    Donc il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(argc==2 && strcmp(argv[1], "-c")==0 )
    Ou, mieux puisqu'on est dans un forum C++ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(argc==2 && argv[1] == std::string("-c") )

  4. #4
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Ah en fait je viens de regarder l'autre topic de corseb et le code qui marche pas vient de là-bas.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 54
    Par défaut
    Citation Envoyé par roulious
    Oui : strcmp renvoit 0 si ses deux arguments sont égaux et ce 0 est converti en booléen false.

    Donc il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(argc==2 && strcmp(argv[1], "-c")==0 )
    Ou, mieux puisqu'on est dans un forum C++ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(argc==2 && argv[1] == std::string("-c") )
    yipeee lou!!!




    que des erreurs, sur erreurs!!

    C++==string("nul");



    Mrci de vos reponses neanmoins...
    Alors je ne pige pas quand meme comment il reconnait -a et -c et kil inverse les deux... jai essayer -z il fait rien de special (normal) et pleins dautres tests...mais pourqoi -a il fait -c???

    M'enfin... l'erreur de if(argc==2 && argv[1] == std::string("-c") ) est:

    Jsc++.cpp
    D:\Jsc++.cpp(18) : error C2679: binary '==' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or there is no acceptable conversion)
    D:\Jsc++.cpp(92) : error C2679: binary '==' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or there is no acceptable conversion)
    Error executing cl.exe.

    Voila...

  6. #6
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Bon alors ecoute bien

    Voila ton code en ENTIER
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <iostream.h>
    void main
    {
    if(argc==2 && argv[1][0]== "-" && argv[1][1] == "c" )
    {
      cout << "arument -c";
    }
    else if(argc==2 && argv[1][0]== "-" && argv[1][1] == "a"  )
    {
    cout << "blabla";
    }
    }
    Voila une Deuxieme solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <iostream.h>
    #include <string.h>
    void main
    {
    if(argc==2 && !strcmp("-c", argv[1]))
    {
      cout << "arument -c";
    }
    else if(argc==2 && !strcmp("-a", argv[1]))
    {
    cout << "blabla";
    }
    }
    De plus si tu lis l'autre topic ou tu as demandé de l'aide en entier tu verras ils t'expliquent pourquoi ça inverse.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 54
    Par défaut
    Citation Envoyé par coyotte507
    Bon alors ecoute bien

    Voila ton code en ENTIER
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <iostream.h>
    void main
    {
    if(argc==2 && argv[1][0]== "-" && argv[1][1] == "c" )
    {
      cout << "arument -c";
    }
    else if(argc==2 && argv[1][0]== "-" && argv[1][1] == "a"  )
    {
    cout << "blabla";
    }
    }
    Salut!
    merci de ta reponse, mais cela fonctionne:

    if(argc==2 && strcmp(argv[1], "-c")==0 )

    Je vais donc m'en tenir a ce code!!

    J'apprecie ton code compliqué mais je dois encore prevoir 11 differents fonctions de mon programme avec ces 11 differentes lignes de commandes!!

    Donc pas le temps de fignoler!!

  8. #8
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    lol c'était la réponse de rouliou et pourtant tu avais testé son deuxième code.

  9. #9
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 299
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    tout ceci est bien confus. Quelques remarques pour tenter d'éclaircir tout ça:

    * le main() d'une appli en c++ prend un tableau de char* en paramètre, c'est le fameux argv. Donc argv[i] est un char*, c'est à dire un tableau de char.

    * le char* est un pointeur, et pas une classe. Si tu compare un char* avec un autre char*, en utilisant l'opérateur ==, ça va comparer l'adresse du tableau, et pas son contenu.

    * l'erreur que tu obtiens, et le compilateur l'écris clairement, viens du fait que tu veux comparer un char* et une std::string, et qu'il n'existe pas d'opérateur en c++ pour faire ça.

    * en c++, il faut favoriser l'utilisation de classes. Donc, plutôt des std::string que des char*. Mais soit tu utilises l'un, soit l'autre.

    Hope it helps.

    [edit]Je ne pense pas que ce soit lui rendre service que de donner du code brut sans expliquer les principes...

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par défaut
    Citation Envoyé par r0d
    * l'erreur que tu obtiens, et le compilateur l'écris clairement, viens du fait que tu veux comparer un char* et une std::string, et qu'il n'existe pas d'opérateur en c++ pour faire ça.
    Pas directement, mais std::string dispose d'un constructeur prenant un char* en paramètre. Donc à condition d'inclure <string> dans le main (pour virer les erreurs de compilation concernant l'opérateur == inconnu), ça fonctionne.

    Et puis aussi penser à lire la FAQ consacrée à ce sujet. La FAQ c'est bon, mangez-en.

  11. #11
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 299
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par roulious
    Pas directement, mais std::string dispose d'un constructeur prenant un char* en paramètre. Donc à condition d'inclure <string> dans le main (pour virer les erreurs de compilation concernant l'opérateur == inconnu), ça fonctionne.
    Exact, je suis allé un peu vite en besogne. Merci pour la correction

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

Discussions similaires

  1. [DEBUTANT]Installer un client ftp sur un linux ligne de commande
    Par tripper.dim dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 11/06/2007, 17h28
  2. [DEBUTANT again]Arguments ligne de commande
    Par panda31 dans le forum Langage
    Réponses: 14
    Dernier message: 31/05/2007, 18h19
  3. [DEBUTANT] Ligne de commande avec ShellExecute()
    Par alainpeniche dans le forum Windows
    Réponses: 3
    Dernier message: 22/08/2005, 11h08
  4. [Debutant(e)]Lancer un exe en ligne de commande
    Par MASSAKA dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 18/05/2004, 14h54
  5. Analyser la ligne de commande
    Par benj29 dans le forum C
    Réponses: 14
    Dernier message: 19/11/2002, 04h13

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