Programmation en C

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

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Guki
     
    /* 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
  2. theskel
     
    je comprend ce que tu as dit?
    0
    1. ledjlale
       
      mouarf, si ta oublié "pas":
      au lieu d'utiliser beep(...), tu pren un printf sous une condition
      0
      1. Guki > ledjlale
         
        Erreur 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
  3. Guki
     
    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. ledjlale
       
      c ce que je di en plus francisé
      0
    2. theskel
       
      Mais mon script n'est pas bon?
      0
    3. hum > theskel
       
      hum..........
      a premiere vue ta methode, c'est une fonction pas une procedure
      0
    4. Guki > 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. theskel > theskel
       
      Je suis désole mais je ne voit pas comment mettre de condition sur un printf en fonction des condition du .exe
      0
  4. Canard007 Messages postés 5954 Date d'inscription   Statut Contributeur 216
     
    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. theskel
       
      oui jte remercie pour ton eclairage mais le bool beep fo bien le declarer ?
      0
    2. Canard007 Messages postés 5954 Date d'inscription   Statut Contributeur 216 > theskel
       
      negatif
      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. theskel > Canard007 Messages postés 5954 Date d'inscription   Statut Contributeur
       
      #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. Guki > theskel
       
      /* definition de fonction */

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

      /* utilisation de fonction */

      fonction(valeur);

      Essai sans bool ça ira mieux.
      0
    5. Canard007 Messages postés 5954 Date d'inscription   Statut Contributeur 216 > Guki
       
      le bool c'est le retour...
      tu peux faire bool test = beep(...)
      ou beep(..) tout court

      COIN!
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Canard007 Messages postés 5954 Date d'inscription   Statut Contributeur 216
     
    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. theskel
       
      tu mes sa en parametre une fois la compilation realise?
      Car une fois la compilation effectue il mesors tjrs le meme son
      0
    2. theskel
       
      argv[1],..... sont des parametres entre apres le .exe
      0
      1. Canard007 Messages postés 5954 Date d'inscription   Statut Contributeur 216 > theskel
         
        mon 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
  7. theskel
     
    #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
  8. Guki
     
    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. ledjlale
       
      sscanf
      0
  9. Guki
     
    Je l'avais oublier cette fonction voici son proto:

    int atoi(const char *nptr);
    0
  10. Guki
     
    sans oublier #include <stdlib.h>
    0
    1. theskel
       
      Désoile mais j'ai pas tout compris
      0
  11. Canard007 Messages postés 5954 Date d'inscription   Statut Contributeur 216
     
    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. theskel
       
      tu est sur du "int param...."?
      0
      1. Canard007 Messages postés 5954 Date d'inscription   Statut Contributeur 216 > theskel
         
        pourquoi ca te plais pas comme nom?
        tu n'as qu'a l'appeler tartanpion...

        COIN!
        0
      2. theskel > theskel
         
        lol 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
  12. Guki
     
    #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. theskel
       
      #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
  13. poof65
     
    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. Guki
       
      En plus d'être veinard il est mauvaise langue! :-P
      0
    2. Canard007 Messages postés 5954 Date d'inscription   Statut Contributeur 216
       
      spa facil

      COIN!
      0
  14. theskel
     
    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
  15. poof65
     
    Il existe pas une fonction pause() ou sleep() ?

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