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 :

ASCII, Clavier et boucle sans fin


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut ASCII, Clavier et boucle sans fin
    bonjour a tous,
    voilà j'ai un petit problème je ne connais pas la fonction qui permet de détecter un appuis sur une touche du clavier.

    En gros j'amirais faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    scanf ("appuyer sur une touche");
    if (/*la touche appuyer est bien "e" */)
    {
    printf ("coucou");
    }
    return 0;
    Comment faire pour reconnaître l'appuis d'une touche ??

    Autre problème: j'aimerais bien faire en sorte d'arrêter une boucle au milieu de son execution (en fait à l'instant précis ou j'appuis sur une touche)

    par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (1)
    {
    printf("coucou");
    printf("salut");      //ici j'appuis sur la touche et je sors du while                   
                            // sans imprimer le toto
    printf("toto");
    }
    Merci de votre attention et de vos futur propositions ^^.

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut

    Tu peux pas detecter qu'on appuie sur une touche en C standard.
    Après si tu precises la plateforme, on te conseillera une librairie qui le permette

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Ça dépend un peu de ton OS, sous Windows, il y a kbhit() qui detecte l'appui de la touche, voir ici
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  4. #4
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    1) kbhit() <conio.h>
    2) break

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Si cela ne te dérange pas d'appuyer sur <ENTER> après avoir appuyé sur une touche, cela peut convenir:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #include <stdio.h>
    #include <stdlib.h>
     
    void purge(FILE *stream)
    {
        int c;
        while ((c = fgetc(stream)) != '\n' && c != EOF)
        {
            continue;
        }
    }
     
    int main(void)
    {
        int c = 0;
     
        while (c != 'e')
        {
            printf("Appuyez sur une touche: ");
            fflush(stdout);
            if ((c = fgetc(stdin)) != 'e')
            {
                if (c != '\n')
                {
                    purge(stdin);
                }
                printf("Coucou!\n\n");
            }
        }
        puts("FIN du programme!!\n");
        return EXIT_SUCCESS;
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut
    Tous d'abord merci a tous pour avoir répondu si rapidement.

    Je vais m'empresser de tester tou ça. ^^

    Enfin je suis sous Windows et je programme sous Visual C++, Dev C++ et Gnuarm (pour transférer sur un robot de Pob Technology).



    (www.pob-technology.com)


    edit:
    Bon ben là j'ai testé vos programme et je reconnais qu'ils fonctionnent sous visual c++ mais je n'arrive pas a le transferrer sur mon robot et j'en suis dégouter ...... Néansmoins je voulais vous remercier pour vos effort.

    L'erreur produite est
    undefined reference to `__imp__iob'

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut
    Désolé de faire un double post c'est pour posé une nouvelle question sur le même sujet.

    Existe t'il une commande de type "scanf" qui ne demande pas d'appuyer sur "Entrée" aprés la touche?

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par stozmen
    Existe t'il une commande de type "scanf" qui ne demande pas d'appuyer sur "Entrée" aprés la touche?
    On te l'a déjà dit, pas en C standard.

    Si tu as le droit à la bibliothèque conio, tu peux utiliser et kbhit() et getch(). Il y a quoi comme système sur ton robot ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut
    En fait tous les tests que j'ai effectué avec vos exemples m'imposaient d'appuyer sur "Entrée" après ma touche or je ne peux pas appuyer sur cette touche sinon je perd la communication avec le robot.
    Quant à savoir le système installé sur le robot, il est propre à Pob Technology:
    http://www.pob-technology.com/ il m'est donc difficile d'expliquer son fonctionnement.

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par stozmen
    En fait tous les tests que j'ai effectué avec vos exemples m'imposaient d'appuyer sur "Entrée" après ma touche or je ne peux pas appuyer sur cette touche sinon je perd la communication avec le robot.
    Quant à savoir le système installé sur le robot, il est propre à Pob Technology:
    http://www.pob-technology.com/ il m'est donc difficile d'expliquer son fonctionnement.
    OK. C'est donc sur le PC que tu veux pouvoir passer des commandes et gérer une communication en même temps? Simple avec les threads. C'est fait pour...

    http://emmanuel-delahaye.developpez.com/pthreads.htm

    Et là, tu peux utiliser fgets() sans problèmes. Les fonctions d'entrées bloquent le threads, mais les autres continuent de vivre leur vie...

    Explique ton projet. Il faut faire une passe de conception sérieuse...

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut
    Je veux bien expliquer mon projet ^^
    Alors voilà j'ai le Pob-Bot (c'est un robot), je veux qu'il fonctionne en mode "Automatique" (dans ce mode le robot est entièrement autonome et se déplace selon un algorithme prédéfinit) et en mode "Manuel" (c'est ici que j'ai besoin de vous).
    A l'aide d'une liaison radio je suis toujours en contact avec le robot (je reçoit d'ailleurs très bien ce qu'il voit) et je souhaiterais le piloter à distance pour cela j'ai deux options (selon moi):
    - soit j'utilise le clavier (n'importequel touche m'irais) mais sans confirmation avec "Entrée".
    -soit j'utilise un périphérique externe (joystique, joypad, ...) sachant que mon robot communique par le port COM1 (qui est donc supporter par le compilateur Pob).

    Les fonctions pour faire bouger le robot me sont connus et je n'est pas de problème de communication avec le robot via ma connection radio.
    Pour le programmer je ne dispose que de trois langage (au choix) le C (c'est ce langage que j'ai adopté), le Java (un peu gros pour tenir dans la mémoire) et le Basic (pas assez évolué a mon goût).

    PS: fonction dans le Pob-Bot http://www.pob-technology.com/api/c/files.html

  12. #12
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Citation Envoyé par stozmen
    - soit j'utilise le clavier (n'importequel touche m'irais) mais sans confirmation avec "Entrée".
    tu trouvera quelques solutions dans cette FAQ : http://c-faq.com/osdep/cbreak.html

    Mais comme l'ont dit les autres posteurs de ce thread, aucune n'est portable.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut
    Merci pour votre aide.

    Je viens de réfléchir et je me suis rendu compte que seul le robot doit être programmer en C et attendre les instructions du Port Com (et non pas du clavier). Hors je pense savoir comment effectuer cette partie du travail.

    Il ne me reste donc plus qu'à trouver un moyen de transférer mes "caractères clavier" sur le Port Com. Ceci pouvant ce faire par l'intermédiare de tout langage confondu.

    Il faut donc que je réfléchisse à un moyen de communique avec les périphériques (je pense que je vais étudier attentivement vos propositions données dans mon autre poste).

    Merci à tous !

    PS: Si vous avez d'autres choses à me proposer je suppose que la meilleur des façons est de m'envoyer un MP (puisque ceci n'aurait plus de rapport avec le programme C).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/11/2009, 16h22
  2. [Débutant]Boucle sans fin : Wend non reconnu
    Par SebHoule dans le forum IHM
    Réponses: 5
    Dernier message: 12/06/2006, 16h49
  3. C : utilisation de getopt - il boucle sans fin...
    Par moussmouss dans le forum C
    Réponses: 14
    Dernier message: 21/12/2005, 11h35
  4. Boucle sans fin : danger pour le serveur ?
    Par Rémiz dans le forum Langage
    Réponses: 4
    Dernier message: 09/12/2005, 16h52
  5. [SQL SERVER 2000] Fonction utilisateur : boucle sans fin
    Par galinijay dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 30/09/2005, 16h03

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