Programmation en C

Bonjour a tous,voila mon probleme je dois effectuer un programme qui emet un son en fonction de aprametre exterieur entre lors de l'execution de l'exe( monex.ex /1000 ....) mais je n'arrive pas a le compiler pourriez vous m'aidez car je debute et je desespere depuis 3 jours.
Voila mon code au cas ou de grave erreur soit commise
#include 

int main(int argc, char *argv[])
{  
beep(argv[1],argv[2]);
beep(argv[3],argv[4]);
}

Jvous remercie d'avance

16 réponses

Résumé de la discussion

Le problème décrit consiste à émettre un son paramétré par des arguments externes au moment de l'exécution, mais le code fourni ne se compile pas. Plusieurs solutions techniques recommandent l'usage de l'API Beep de Windows, l'inclusion de windows.h et la lecture de argc/argv avec conversion des chaînes en entiers pour les fréquences et les durées. Des ajustements essentiels visent à passer correctement les paramètres à Beep, à caster les arguments en int et à corriger la signature ainsi que les appels dans le main. En cas de besoin, des conseils évoquent aussi l'ajout d'une pause entre deux bips afin de maîtriser le timing.

Bobot (l’IA à votre service)
  1. /* exemple */

    /*
    pour faire un bip on imprime le caractere 7 (erreur?)
    <stdlib.h> pour la macro EXIT_SUCCESS
    */

    #include <stdlib.h>

    int main()
    {
    printf("%c", 7);
    return EXIT_SUCCESS;
    }
    0
    1. je comprend ce que tu as dit?
      0
      1. mouarf, si ta oublié "pas":
        au lieu d'utiliser beep(...), tu pren un printf sous une condition
        0
      2. @ledjlaleErreur monumentale effectivement que je m'empresse de corriger:

        /* exemple */

        /*
        pour faire un bip on imprime le caractere 7 (erreur?)
        <stdio.h> pour printf
        <stdlib.h> pour la macro EXIT_SUCCESS
        */

        #include <stdio.h>
        #include <stdlib.h>

        int main()
        {
        printf("%c", 7);
        return EXIT_SUCCESS;
        }
        0
    2. Si tu as compris l'exemple il suffit d'ajouter tes arguments et d'évaluer les conditons nécessaires à l'émission d'un bip.
      0
      1. c ce que je di en plus francisé
        0
      2. Mais mon script n'est pas bon?
        0
      3. @theskelhum..........
        a premiere vue ta methode, c'est une fonction pas une procedure
        0
      4. @theskel#include

        int main(int argc, char *argv[])
        {
        beep(argv[1],argv[2]);
        beep(argv[3],argv[4]);
        }

        Ce n'est pas un script mais un code source qui va être compilé pour donner du code machine exécuté par le processeur et non interprété par l'interpréteur qui lui est du code machine exécuté par le processeur.

        Bon en ce qui concerne le code source "#include" veut dire inclure mais quoi? je me pose la question. "beep" est une fonction utilisée mais définie nulle part donc peut être il manque un bout du "#include" pour utiliser la fonction "beep". Voilà une rapide analyse.
        0
      5. @theskelJe suis désole mais je ne voit pas comment mettre de condition sur un printf en fonction des condition du .exe
        0
    3. Contributeur
      Encore notre bonne vielle win32
      The Beep function generates simple tones on the speaker. The function is synchronous; it does not return control to its caller until the sound finishes. 
      
      BOOL Beep(
      
          DWORD dwFreq,	// sound frequency, in hertz 
          DWORD dwDuration 	// sound duration, in milliseconds 
         );


      donc faut faire #include <windows.h>

      sinon fait gaffe a bien passer des entier dans tes parametres...
      COIN!
      0
      1. oui jte remercie pour ton eclairage mais le bool beep fo bien le declarer ?
        0
      2. Contributeur
        @theskelnegatif
        tu remplace le #include de ton prog
        par #include <windows.h>
        ca devarit marcher tout seul
        par contre je te conseil de caster tes arguments en placant (int) devant ca evitera une crise de nerf du compilateur ^^

        COIN!
        0
      3. @Canard007
        #include <windows.h>
        
        int main(int argc, char *argv[])
        {  
        bool Beep(argv[1],argv[2]);
        bool Beep(argv[3],argv[4]);
        
        }

        Voila et il me dit :
        `bool Beep' previously declared here
        conflicts with previous declaration `bool Beep'
        0
      4. @theskel/* definition de fonction */

        type fonction(type argument)
        {
        /* instructions */
        }

        /* utilisation de fonction */

        fonction(valeur);

        Essai sans bool ça ira mieux.
        0
      5. Contributeur
        @Gukile bool c'est le retour...
        tu peux faire bool test = beep(...)
        ou beep(..) tout court

        COIN!
        0
    4. Contributeur
      avec ces valeurs tu devrai voir la différence..un grave et un aigu
      Beep(440,1000);
      Beep(5000,4000);
      a savoir que le 440 corespond a un LA ^^

      COIN!
      0
      1. tu mes sa en parametre une fois la compilation realise?
        Car une fois la compilation effectue il mesors tjrs le meme son
        0
      2. argv[1],..... sont des parametres entre apres le .exe
        0
      3. Contributeur
        @theskelmon exe argv1 argv2 argv3 argv4
        et tu remplace par les nombre adequat..
        ensuite tu cast tes parametres
        tu fait int parametre1= argv1
        int parametre2 = argv2 etc...
        ensuite tu fait
        Beep(parametre1,parametre2)
        Beep(parametre3,parametre4)

        mais il me semble t'avoir dit de caster tes parametres au tout debut...

        COIN!
        0
    5. cast? je comprend pas ce que c'est
      0
      1. #include <windows.h>
        
        int bip( char argv[])
        {
            int param1=argv[1],param2=argv[2];
            int param3=argv[3],param4=argv[4];
            Beep(param1,param2);
            Beep(param3,param4);
        }
            
        int main(int argc, char *argv[])
        {  
           bip(*argv);
        }

        Voila j'ai fait sa mais sa change rien du tout il me sors tjrs des bip grave.
        Jsuis désolé mais ji arrive pas
        0
        1. Un cast sur un pointeur pour transfomer une chaine de caractere en entier c'est assez louche comme méthode, je serais même tenter de dire que ça ne marche pas.

          Il doit y avoir dans une des bibliothèques du C une fonction pour transformer une chaine de caractère en entier. Je vais jetter un oeil dans ma doc pour voir.
          0
          1. sscanf
            0
        2. Je l'avais oublier cette fonction voici son proto:

          int atoi(const char *nptr);
          0
          1. sans oublier #include <stdlib.h>
            0
            1. Désoile mais j'ai pas tout compris
              0
          2. Contributeur
            ah oui effectivement...j'avais pôint vu le passage de n'arguments.
            #include <windows.h>
            
            int bip( char argv[])
            {
                int param1=atoi(argv[1]);
                int param2=atoi(argv[2]);
                int param3=atoi(argv[3]);
                int param4=atoi(argv[4]);
                Beep(param1,param2);
                Beep(param3,param4);
            }
                
            int main(int argc, char *argv[])
            {  
               bip(*argv);
            }
            


            COIN!
            0
            1. tu est sur du "int param...."?
              0
            2. Contributeur
              @theskelpourquoi ca te plais pas comme nom?
              tu n'as qu'a l'appeler tartanpion...

              COIN!
              0
            3. @theskellol c'est pas le nom qui me dérange c'est que lorsque je le compil il me dit
              [Warning] passing arg 1 of `atoi' makes pointer from integer without a cast

              Et lors de l'execution de mon exe 440 1000 5000 1000 sa me fait erreur windows.
              0
          3. #include <stdlib.h>
            #include <windows.h>

            int bip( char *argv[]);

            int main(int argc, char *argv[])
            {
            bip(argv);
            return EXIT_SUCCESS
            }

            int bip( char *argv[])
            {
            int param1=atoi(argv[1]);
            int param2=atoi(argv[2]);
            int param3=atoi(argv[3]);
            int param4=atoi(argv[4]);
            Beep(param1,param2);
            Beep(param3,param4);
            }

            ça donne quoi ça?
            0
            1. #include <stdlib.h> 
              #include <windows.h> 
              
              int bip( char *argv[]); 
              
              int main(int argc, char *argv[]) 
              { 
              bip(argv); 
              return EXIT_SUCCESS; 
              } 
              
              int bip( char *argv[]) 
              { 
              int param1=atoi(argv[1]); 
              int param2=atoi(argv[2]); 
              int param3=atoi(argv[3]); 
              int param4=atoi(argv[4]); 
              Beep(param1,param2); 
              Beep(param3,param4); 
              } 

              il manque juste une ; apres le exit success mais sinon apres compilation et test je n'est qu'une chose à dire MERCI ca marche je vous remercie tous de m'avoir aide vous ete super sympa
              0
          4. Moi a ta place je laisserais tomber le programme et je ferais des bip avec ma bouche.

            --------------------------------------------------------
            L'informatique est un long fleuve pas tranquille !!!
            0
            1. En plus d'être veinard il est mauvaise langue! :-P
              0
            2. Contributeur
              spa facil

              COIN!
              0
          5. Encore une petite kestion pour faire une pause entre les deux beep en reglant la durée savez vous kel frequence de beep je peu mettre pour ne pas l'entendre car j'ai essayer avec un beep(0,XX) et sa marche pas il ne le prend pas en compte.
            Si vous avez une solution ou une autre fonction ki me permetre de le faire?
            Jvous remercie bien
            0
            1. Il existe pas une fonction pause() ou sleep() ?

              --------------------------------------------------------
              L'informatique est un long fleuve pas tranquille !!!
              0
              1. je te remercie bien poof65 pour la fonction sleep.
                0