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++]Quel code avoir pour utiliser les arguments en ligne de commande?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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++]Quel code avoir pour utiliser les arguments en ligne de commande?
    Salut,

    Je souhaite executer mon programme, on va dire "calculelimage.exe" avec l'option -c par exemple.

    Donc "calculelimage.exe -c" dans le raccourci windows.

    or ce que je souhaite faire, c'est specifier dans mon code:

    Si "-c" alors fait ca, sinon fait ca...


    J'ai bien un bout de code me disant:

    {code:}
    #include <fstream.h>

    main(int argc, char argv[])
    {
    ifstream fin;
    ofstream fout;
    if (argc!=3) {
    cerr << "usage blabla \N"; exit(1);}

    fin.open(argv[1]);
    fout.open(argv[2]);

    if(!fin)
    {cerr...
    blabla


    Or je ne comprends pas!

    ce "ouvre un stream fin blabla"... je ne veuix pas ouvrir de stream, je veux juste verifier avec quels arguments on a a ppeler mon progrmme??

    Je precise que ce code se trouve dans le main de mon programme, celui qui en version "monprogramme.exe -c" est censer agir differement qu'en "monprogramme.exe"...


    Merci!!

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Je te fais une version à la C :

    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
     
    #include <cstring>
     
    /*argc, c'est le nombre d'argument passé en paramètre,
      argv est un tableau vers les éléments passés en paramètre,
      argv[0] est le nom du programme appelant*/
    int main(int argc, char* argv[])
    {
     if(argc==2 && strcmp(argv[1], "-c")==0)
     {
      /*execute quand il y a l'option -c*/
      ...
     }
     else
     {
       /*les autres cas*/
     }
     
      ...
     return EXIT_SUCCESS;
    }

  3. #3
    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
    merci de ta reponse rapide!!

    Alors jai essayé,
    deja il faut mettre une parenthese la:
    if(argc==2 && strcmp(argv[1], "-c") )
    Elle a été oubliee!
    (je dis cela seulement si quelqu'un relit notre code et ne comprends pas l'erreur! )

    Ensuite,
    il n'aime pas quand j'ecrit comme toi "-c"... il semble accepter le "c" simplement, sans le tiret.
    Je vais verifier tout cela desuite!!


    Merci en tout cas cela m'a beaucoup aidé!

  4. #4
    Membre chevronné Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Par défaut
    pourquoi ne pas tout simplement faire comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int main(int argc, char *argv[]) {
     if (argc == 2 && argv[1] == "-c") {
      instructions
     } else {
      instructions
     }
    }

  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 alceste
    pourquoi ne pas tout simplement faire comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int main(int argc, char *argv[]) {
     if (argc == 2 && argv[1] == "-c") {
      instructions
     } else {
      instructions
     }
    }

    Salut!!

    Alors merci, mais cela ne fonctionne pas!!


    Cela n'affiche mon output simplement si je met ce code:

    if(argc==2 && strcmp(argv[1], "-c") )
    Et si je supprime le " -"

    Donc:

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



    ecrire if (argc == 2 && argv[1] == "-c") {
    cout << "test";
    }
    n'affichera rien/....

    Test ne s'affiche qu'avec "if(argc==2 && strcmp(argv[1], "c") )"


    Allez savoir pourquoi!!?

  6. #6
    Membre confirmé Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Par défaut
    Salut,
    Citation Envoyé par Alceste
    pourquoi ne pas tout simplement faire comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int main(int argc, char *argv[]) 
    { 
        if (argc == 2 && argv[1] == "-c") 
         { instructions } 
       else 
         { instructions }
     }
    car tu compares un pointeur a un aute pointeur et ces deux pointeurs ne pointent pas du tout sur la même chose.
    argv[1] pointe sur "-c" de la ligne de commande et "-c" pointe a un autre endroit (je ne sais plus exactement lequel, je crois que c'est l'endroit ou tu as les variables constantes).

    Si tu veux que lorsqu'on ecrit :
    tonprog.exe -c
    cela affiche test il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (argc == 2 && !strcmp(argv[1], "-c")) {
    cout << "test";
    }
    Car strcmp renvoie 0 si les 2 chaines sont egales (ie faux).

  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
    merci,

    Juste une question!

    cela signifit quoi:

    argc == 2?

    J'ai bien compris que argv[0] est le nom du programme, et argv[1]..seront les arguments a la suite!


    Merci!

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Par défaut Utilisation de ARGV
    Essayes un truc comme ça, et tu comprendras ce qu'il y a dans argv[] (attention il y aura une différence entre le monde unix et windows!) ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    #include <fstream.h>
     
    main(int argc, char argv[])
    {
    ....
     
    for(int i=0; i< argc;i++){
       cerr << argv[i];
    }
     
    ...
    Bye

  9. #9
    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 NewDid
    Essayes un truc comme ça, et tu comprendra ce qu'il y a dans argv[] (attention il y aura une différence entre le monde unix et windows!) ...

    Bye

    Merci! oOPS, CAR JE fait mon code sous windows (avec visual c++ version 6.0) et je devrais faire la presentation sous unix...
    Je pensais que j'allais m'envoyer le code en texte par email, et le recopier/ recompiler a l'université sous Unix!!

    Mais si le code est different... aie!!

  10. #10
    Membre chevronné Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Par défaut
    Citation Envoyé par NewDid
    Essayes un truc comme ça, et tu comprendras ce qu'il y a dans argv[] (attention il y aura une différence entre le monde unix et windows!) ...
    sous unix argv[0] retourne le chemin vers l'application et il me semble que sous windows c'est la même chose ? à part peut-être que sous win il n'y a que le nom de l'application qui soit retourné. Sinon pour le reste ça doit être la même chose.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/08/2012, 14h36
  2. [EJB] Quelles bonnes pratiques pour utiliser les transactions "en ligne"?
    Par kisitomomotene dans le forum Java EE
    Réponses: 1
    Dernier message: 12/12/2011, 20h22
  3. Quels modules Perl pour gérer les documents XML ?
    Par djibril dans le forum Modules
    Réponses: 8
    Dernier message: 02/12/2010, 23h54
  4. Réponses: 1
    Dernier message: 30/06/2006, 15h49
  5. [Debutant] probleme pour utiliser les classes d'un .jar
    Par pissek dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 12/05/2004, 18h21

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