Pb commande Prog en c

Résolu
Bonjour,

Pouvez_vous m'aidez à comprendre le programme suivant :

#include <stdio.h>
void main(int argc,char* argv[]) {
if(argc<3) {
printf ("°/.s : Usage '/,s <mot-l> <mot-2>\n", argv[0], argv[0]); return; }
printf ("\ty,s\n\ty„s\n",argv [2] ,argv[l]) ; }

Commenter ce programme. Imaginer ensuite que ce programme soit compilé en un programme exécutable prog.

Déterminer l'effet des commandes : prog, prog fleur, prog fleur bouillie, prog fleur bouillie tourbillon.

Merci d'avance.
Configuration: Linux
Firefox 3.0.8

13 réponses

  1. Modérateur
    Salut,

    Indice: argc représente le nombre d'arguments passés en paramètres. Il y en a au moins un: le nom du programme qui est le paramètre par défaut.

    Argv est le tableau de paramètres passés au programme.
    Si tu tapes prog bidule argc vaudra 2 et argv[0] = "prog", argv[1] = "bidule"
    1. Bonsoir ,

      Merci de m'avoir répondu.

      SVP, pouvez vous mieux m'expliquer je débute en c et je rencontre bcp de pb, il ya des choses que je comprend comme :

      "prog, prog fleur, prog fleur bouillie, prog fleur bouillie " ---> qcq ça signifie?

      Merci d'avance.
      1. Modérateur
        Tu travailles sous windows ou Linux?

        Tu as déjà lancé un programme en ligne de commande? Les systèmes possèdent généralement une fenêtre de commande (ou shell), un écran noir dans lequel tu peux taper des commandes.

        Quand tu tapes une commande, tu lances un programme avec des arguments, comme ça:

        nom_commande argument1 argument2

        Hmm?
        1. je travail sur Linux (ubuntu).

          je dois savoir ce que font ces commandes déja cité mais , on m'affiche ce message d'erreur :

          "No manual entry for prog"

          autre chose je dois commenter ce programme qcqu'il retourne comme resultat,

          #include <stdio.h>
          void main(int argc,char* argv[]) {
          if(argc<3) {
          printf ("°/.s : Usage '/,s <mot-l> <mot-2>\n", argv[0], argv[0]); return; }
          printf ("\ty,s\n\ty„s\n",argv [2] ,argv[l]) ; }

          mais par contre j'ai eu ce msg d'erreur en le compilant :
          ex1td3.c: In function ‘main’:
          ex1td3.c:5: erreur: ‘l’ undeclared (first use in this function)
          ex1td3.c:5: erreur: (Each undeclared identifier is reported only once
          ex1td3.c:5: erreur: for each function it appears in.)
          ex1td3.c:2: attention : return type of ‘main’ is not ‘int’
          1. Modérateur
            Salut,

            Tu as mis un l (L en minuscules) ou lieu de 1 (chiffre "UN")
            lami20j@debian:~/trash$ cat vide.c
            #include <stdio.h>
            int main(int argc,char* argv[])
            {
              if(argc<3) {
                printf ("°/.s : Usage '/,s <mot-l> <mot-2>\n", argv[0], argv[0]); return;
              }
              printf ("\ty,%ss\n\ty,,%ss\n",argv [2] ,argv[1]) ;
              return 0;
            }
            lami20j@debian:~/trash$ gcc vide.c
            lami20j@debian:~/trash$ ./a.out
            °/.s : Usage '/,s <mot-l> <mot-2>
            lami20j@debian:~/trash$ ./a.out azerty qwerty
                    y,qwertys
                    y,,azertys
            
            1. De ta part, je suis surpris:
              printf ("°/.s : Usage '/,s <mot-l> <mot-2>\n", argv[0], argv[0]);, avec un 'gcc -Wall vide.c' ça râlerait sec !
              Il doit y avoir une erreur de recopie quelque part... on le sent bien ;-)
              Bonne soirée.
            2. Modérateur
              @loupiusSalut,

              Oui, j'ai vu après.
              J'ai fait un copier/coller ;-)
          2. Bonsoir lami20j,

            Merci pour votre réponse.

            Est ce que vous pouvez m'expilquer un peu le resultat de ce praogramme, ainsi que cette ligne :

            " printf ("°/.s : Usage '/,s <mot-l> <mot-2>\n", argv[0], argv[0]); "

            excusez_moi pour mes questions un peu débile, mais je débute en programmation c c'est pour cela je met tout en question :)

            Merci d'avance.
            1. Modérateur
              Re,
              lami20j@debian:~/trash$ cat vide.c
              #include <stdio.h>
              int main(int argc,char* argv[])
              {
                if(argc<3) {
                  printf ("Usage: %s arg1 arg2\n", argv[0]);
                  return -1;
                }
                printf ("%s %s\n",argv [2] ,argv[1]) ;
                return 0;
              }
              lami20j@debian:~/trash$ gcc -Wall vide.c
              lami20j@debian:~/trash$ ./a.out
              Usage: ./a.out arg1 arg2
              lami20j@debian:~/trash$ ./a.out arg1 arg2
              arg2 arg1
              
              1. Pourquoi j'ai ça comme affichage :

                cotta@cotta-laptop:~/Bureau$ ./a.out ex1td3.c
                ./a.out : Usage ./a.out <mot-1> <mot-2>
                et pourquoi dont on mettre aprés le ./a.out
                cotta@cotta-laptop:~/Bureau$ ./a.out azerty qwerty

                pour avoir cette resultat :

                y,qwertys
                y,azertys
                1. Puorquoi on lance l'éxecutable avec deux paramétres :

                  cotta@cotta-laptop:~/Bureau$ ./a.out azerty qwerty
                  1. Modérateur
                    Re,

                    lami20j@debian:~/trash$ cat vide.c
                    #include <stdio.h>
                    int main(int argc,char* argv[])
                    {
                      if(argc<3) {
                        printf ("Usage: %s arg1 arg2\n", argv[0]);
                        return -1;
                      }
                      printf ("y,%ss\ny,%ss\n",argv [2],argv[1]) ;
                      return 0;
                    }
                    lami20j@debian:~/trash$ gcc -Wall vide.c
                    lami20j@debian:~/trash$ ./a.out
                    Usage: ./a.out arg1 arg2
                    lami20j@debian:~/trash$ ./a.out azerty qwerty
                    y,qwertys
                    y,azertys

                    1. SVP, quel est l'effet des commandes suivantes j'ai bau cherché mais je ne trouve pas :

                      prog, prog fleur, prog fleur bouillie, prog fleur bouillie tourbillon.

                      Merci.
                      1. Modérateur
                        Re,

                        "prog, prog fleur, prog fleur bouillie, prog fleur bouillie " ---> qcq ça signifie?
                        D'abord c'est à toi de nous dire d'où t'as sorti ces noms.

                        Si prog c'est le nom de ton programme exécutable après la compilation alors
                        prog - c'est l'exécution du programme sans argument (ça devrait être plutôt ./prog ou /chemin/vers/prog)
                        prog fleur - c'est l'exécution du programme avec l'argument fleur
                        prog fleur bouillie - c'est l'exécution du programme avec 2 arguments (fleur et bouillie)
                        etc.