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 :

vérifier appui d'une touche


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 378
    Par défaut vérifier appui d'une touche
    bonjour,

    Je m'explique:
    Mon but est d'implémenter un script en C de telle manière qu'à chaque appui de la touche I,j'incrémente la variable globale k.Je n'y arrive pas !

    En C#,en utilisant l'API de Unity,j'y arrive !
    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
     
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
     
     
    public class essai : MonoBehaviour
    {
        int k=0;
     
     
        // Start is called before the first frame update
        void Start()
        {
     
        }
     
        // Update is called once per frame
        void Update()
        {
          if(Input.GetKeyDown(KeyCode.I)
         {
            k++;
            print(k);
        }
     
     
     
     
     
     
    }
    Mon problème est que je n'arrive pas à en faire autant en C:
    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
     
    #include <stdio.h>
    #include <string.h>
     
    int k=0;
     
    void fonction(void)
    {char c;
     
      printf("tapez la lettre i: ");
      scanf("%c",&c);
      if(c=='i')
      { k++;
        printf("%d",k);
     
      }
      else{
        printf("mauvaise saisie caractère");
      }
      }
     
    int main(void) {
     
      fonction();
     
      return 0;
    }
    la raison est simple:
    ce script C ne s'exécute qu'une seule fois et se termine dès que j'appui sur la touche I tandis que dans le srcipt C#,la fonction Update() fait qu'à chaque nouvelle frame,je peux à nouveau appuyer sur la touche I
    Comment modifier le script C pour qu'à chaque fois(et non pas une seule fois) je puisse appuyer à nouveau sur la touche I?

    merci de votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 600
    Par défaut
    Bonjour,

    En C comme en C#, on n'écrit pas des scripts, on écrit du code.

    Pour que quelque chose se répète, il faut utiliser une boucle (avec for ou while). Par exemple, une boucle infinie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main() {
       for (;;) {
          fonction();
       }
    }

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 154
    Billets dans le blog
    4
    Par défaut
    En dehors du fait que pour faire une boucle... il faut effectivement écrire une boucle.
    Ce que tu fais n'as pas grand sens.
    Unity c'est tout un moteur de jeu, Update est exécuté à chaque frame, et tu vérifies que la touche i soit enfoncée ou pas pendant l'exécution de cette frame. Frames qui s'exécutent en continu quoi qu'il arrive.
    Ton truc en C affiche un terminal, attend que l'utilisateur appuie sur une touche, et tu vérifies si cette touche se trouve être i. Et comme c'est une attente, rien d'autre ne se passe pendant ce temps.
    Ça n'a rien à voir, et c'est pas super utile non plus.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 378
    Par défaut
    Voici ce que me donne le terminal de replit.com pour l'execution du code légèrement modifié:
    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
     
    #include <stdio.h>
    #include <string.h>
     
    int i=0;
     
    void fonction(void)
    {char c;
     
      printf("tapez la lettre n: ");
      scanf("%c",&c);
      if(c=='n')
      { i++;
        printf("%d\n",i);
     
      }
      else{
        printf("mauvaise saisie caractère");
      }
      }
     
    int main(void) {
      fonction();
      fonction();
     
      return 0;
    }
    Le terminal de replit.com lui donne à l'execution du programme:
    > ./main
    tapez la lettre n: (je tape une lettre différente de n) +Enter>
    tapez la lettre n: mauvaise saisie caractère> (je tape à nouveau une lettre k différente de n)
    bash: k : command not found
    Bien que fonction() ait été appelée 2 fois,le programme ne permet pas à nouveau de saisir une lettre?
    Pourquoi?

    J'ai amélioré le code avec ceci:
    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
     
    #include <stdio.h>
    #include <string.h>
     
    int i=0;
     
    void fonction(void)
    {char c;
     
      printf("tapez la lettre n: ");
      scanf("%c",&c);
      if(c=='n')
      { i++;
        printf("%d\n",i);
     
      }
      else{
     
       fonction();
      }
      }
     
    int main(void) {
      fonction();
     
     
      return 0;
    }
    au 1er Enter suite à une lettre différente de n,ça écrit 2 fois à la suite tapez la lettre n (alors que je souhaite que ça l'écrive 1 seule fois)

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 600
    Par défaut
    Tu ne tapes pas une lettre, tu tapes 2 touches : ta lettre puis entrée
    Le code va voir arriver ces 2 choses et donc ton premier scanf() verra la lettre, et le scanf() suivant verra la touche entrée.
    Taper sur entrée est incontournable. Il te faut donc dans ton code éliminer le traitement de cette touche. Un moyen simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      scanf("%c ",&c);  // il y a un espace après le %c
    Ça va lire ton caractère et retirer tous les éventuels caractères cachés qui suivent

  6. #6
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 378
    Par défaut
    comment faire un scanf sur la touche Entrée?
    pas trouvé de tuto à ce sujet

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/01/2010, 13h49
  2. [OSSAD] Comment modéliser les processus et la BDD en même temp
    Par nsnous1 dans le forum Autres
    Réponses: 5
    Dernier message: 12/02/2009, 15h47
  3. Réponses: 3
    Dernier message: 15/05/2007, 00h00
  4. Réponses: 8
    Dernier message: 09/11/2006, 14h01
  5. [VB.NET]Connexions multiples pour un même processus.
    Par leSeb dans le forum Windows Forms
    Réponses: 16
    Dernier message: 14/03/2006, 09h53

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