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++

  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 � 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

  4. #4
    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�!

  5. #5
    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
     }
    }

  6. #6
    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!!

  7. #7
    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.

  8. #8
    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!!?

  9. #9
    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).

  10. #10
    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!

  11. #11
    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
    argc c'est le nombre de param�tres.
    Donc ici 2, si tu passes :
    tonProg.exe
    c'est 1,
    etc ...

  12. #12
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Tout simplement, argc, c'est le nombre d'arguments pass�s � la commande (qui est le premier argument pass� � la fonction main) et qui permet de retrouver les autres...
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
     int main(int argc, char* argv[])
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  13. #13
    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 b Oo
    argc c'est le nombre de param�tres.
    Donc ici 2, si tu passes :
    tonProg.exe
    c'est 1,
    etc ...
    ha okay, merci!
    Et dans le cas ou j'aurai genre dix parametres, il vaux mieux que jecrive argc=10 alors!!!

    Jai onze differents parametres je crois!!

    Est ce que cela pose un probleme de declarer un argc plus grand que le reel nombre de parametres?

    MErci!

  14. #14
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Il y a des biblioth�ques pour �a.
    Comme boost program_options.

  15. #15
    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
    Ben tu ne le d�clares pas, c'est fais automatiquement.
    Tu peux penser que tu auras 100 param�tres dans ton main.
    Et tu fais un compteur.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
     while (++i < argc)
      { }
    Il y a une fonction aussi qui permet de trouver la liste des param�tres mais je ne l'ai plus en t�te.

  16. #16
    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
    Donc t'avais pas compris mon post, j'aurais du etre plus explicite, avec un commentaire plus complet .
    En plus de te montrer la signification de argc, la boucle te montre toutes les valeurs dans argv .
    Bye

  17. #17
    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
    Donc t'avais pas compris mon post, j'aurais du etre plus explicite, avec un commentaire plus complet .
    En plus de te montrer la signification de argc, la boucle te montre toutes les valeurs dans argv .
    Bye
    hehe!

    merci!
    non en effet, apres relecture, je comprends...ca affichera tout les arguments, c'est ca?
    Le truc c'est que je debute et que j'ai peur de m'y perdre dans tout ces codes...
    du coup jai pas essayer cette commande la!

    jai un programme a faire avec 13 diffrentes lignes de commandes en parametres chacunes etant plus chian...complexes que les autres!!

    genre ouvrir une image 256*256 avec 256 diffrentes valeurs de gris, et si tu lance le programme.exe avec "-c" ca calcule et affiche la valeur de gris la plus courante....
    13 differents trucs comme ca...

  18. #18
    Membre �m�rite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    D�tails du profil
    Informations personnelles :
    �ge : 50
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par d�faut
    regarde du cot� de boost::program_option
    c'est trestres complet

  19. #19
    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 loufoque
    Il y a des biblioth�ques pour �a.
    Comme boost program_options.

  20. #20
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Ceci dit, il faudra de toutes facons travailler par �tapes (mais peut etre la bibliotheque boost::progam_option t'aidera-t-elle)

    La premi�re est de toutes mani�res de v�rifier la validit� des parametres pass�s en ligne de commande:

    Ensuite, il convient peut etre de veiller � interpr�ter les parametres dans leurs ensemble...
    • La gestion de certains parametres doit peut-etre prise en compte avant d'autre (savoir si le r�sultat du traitement A envoy� dans le traitement B fournira le meme r�sultat que si on envoie B dans A), ind�pendemment de l'ordre d'introduction des arguments
    • Certains arguments prennent le pas sur tous les autres (typiquement: la demande d'affichage de l'aide, qui empechera toute autre ex�cution des parametres �ventuellement rajout�s)
    • Les parametres n�cessitant une information compl�mentaire devront etre trait�s avec cette information (et il s'agira de ne pas essayer de traiter l'information compl�mentaire "toute seule")
    • ...

    Le but sera de cr�er une "liste d'ex�cution" des diff�rents parametre � effectuer, puis de faire les appels correspondant dans le bon ordre...

    Evidemment, ces deux listes ne se veulent surement pas exhaustives... Ce sont plus des exemples propre � orienter ta r�flexion pour d�terminer le tout qu'autre chose ... d'autant plus que je ne connais absolument pas boost::progam_option et que, si ca se trouve, elle permet d'automatiser ce genre de choses
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 2 12 Derni�reDerni�re

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