Probleme d argument

adriano -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

je ne comprend pas comment je recupere le 0 et le 2 dans "0-2"

Code :Sélectionner tout - Visualiser dans une fenêtre à part12345678

./tp donnee.txt -c 0-2 L

argc = 5

argv[0] = "./tp"

argv[1] = "donnee.txt"

argv[2] = "-c"

argv[3] = "0-2"

argv[4] = "L" comment je recupere le "0-2". en fait le 0 et le 2.

je ne comprend pas parce que "0-2" et considerer comme un caractere dans le tableau non?

je suis confus

3 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    je ne comprend pas parce que "0-2" et considerer comme un caractere dans le tableau non?
    Non, c'est une chaîne de caractère. argv est de type char argv*[].
    Donc : argv[3] donne "0-2"
    Si tu veux récupérer le 0 : argv[3][0] => '0' et argv[3][2] => '2'
    Si ces nombres sont plus grands que 9 (exemple : 50-3), il faudra utiliser sscanf/sprintf.
    Cdlt,
    1
  2. adriano
     
    merci fiddy

    mais j ai une question, on fait mon programme fonctionne parfait mais rendu a la recuperation de la ligne de commande, j ai de la misère

    pourquoi je ne peux pas faire cela, quand je suis dans argv[3]

    [code]
    int nombre = 0;
    char * mot;

    mot = argv[3][0];

    nombre = atoi(argv[3][0]);

    printf("mot %s:\n",mot);
    printf("nombre%s:\n",nombre);

    [/code]
    0
  3. adriano
     
    salut fiddy

    c est bon je viens de voir l erreur

    un pointeur pointe sur un tableau, donc

    [code]

    mot = &argv[3][0];
    [/code]

    merci encore
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Attention à l'usage des pointeurs.
      Ici, j'imagine que tu souhaites récupérer la valeur du char.
      Donc char mot=argv[3][0];
      Pour convertir ce chiffre en entier : int nombre=mot - '0';
      Maintenant, (tu n'as pas répondu à ma question précédente...), si argv[3] représente 2 nombres séparés par un tiret. Tu auras des problèmes pour récupérer le deuxième nombre. Mais, tu peux utiliser dans ce cas sscanf...

      Sinon mot=&argv[3][0]; c'est pareil que mot=argv[3]; Cela ne te permet pas de récupérer l'autre nombre.
      0
    2. adriano
       
      oui je comprend pour mot=&argv[3][0];

      en fait j aurai 2 char*mot exemple

      char *mot = argv[3];
      char *mot2 = argv[3][2];
      int nombre = atoi mot
      int nombre2 = atoi mot2


      mais pour 2nombre argv3[11][16];

      hmm bonne question,
      0
    3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Beh c'est surtout dans le cas : argv[3]="56-145", la méthode ne marchera pas.
      Dans ce cas, tu peux utiliser :

      int nb1;
      int nb2;
      sscanf("%d-%d",argv[3],&nb1,&nb2);
      0