Entrée sans la touche entrée

Résolu/Fermé
Messages postés
32
Date d'inscription
samedi 11 avril 2015
Statut
Membre
Dernière intervention
10 juin 2016
-
 LongAzBan -
Bonjour,

Je cherche une fonction en c qui lis les entrées de l'utilisateur sans qu'il doit appuyer sur "entrée" : comme dans un jeu vidéo le personnage avance quand on appuye sur la flèche, et non pas flèche/entrée.

Je suis sous windows, et mon programme est en mode console.

Merci d'avance pour votre aide.

PS: Si il n'existe aucune fonction c pour cela, je peux le faire en c++, mais je préfererais rester en c.

1 réponse

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 803
Bonjour,

Rien de standard en C.
Vous souhaitez le faire en console, avec un interface graphique, ou genre un jeu (3D) ?
Messages postés
32
Date d'inscription
samedi 11 avril 2015
Statut
Membre
Dernière intervention
10 juin 2016
9
Bonjour,

Tout d'abord, désolé pour le retard.

Je voulais faire un "synthé" en ascii, avec la fonction Beep (system), mais pour l'utilisateur c'était un peu galère d'appuyer sur entrée à chaque note ^^

Sinon, connais-tu un moyen de le faire en c++, ou avec un librairie graphique ou autre ?

Merci de m'avoir répondu,

L
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 803
Rien de standard ne veut pas dire que c'est pas possible.
Exemple, la fonction Beep() n'est pas standard, mais tu vas l'utiliser ;-).

Pour permettre à l'utilisateur d'appuyer sur des touches sans valider avec la touche entrée, tu peux utiliser la fonction _getch() (il faut inclure conio.h)
Messages postés
32
Date d'inscription
samedi 11 avril 2015
Statut
Membre
Dernière intervention
10 juin 2016
9
MERCI !
J'arrive enfin à faire mon synthé (en partie... il coupe le son à chaque tour de boucle)
Je publie le code, pour ceux que ça intéresse (il n'y pour l'instant que le la en note, mais on peut rajouter les autres notes)
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>

int main()
{
    int end = 0;
    char c;aaaa
    printf("0 pour quitter, a pour LA");
    while (! end) // ! pour dire dans que la condition est fausse
    {
        c=getch(); // la saisie est stockée dans la variable c
        if (c == '0')
        {
            end = 1; // pour quitter
        }
        if (c == 97) // code ascii de la lettre a minuscule
        {
            Beep(440,400); // note de 440 hertz, pendant 400ms
        }

    }
        return 0;


    return 0;
}

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 803 >
Messages postés
32
Date d'inscription
samedi 11 avril 2015
Statut
Membre
Dernière intervention
10 juin 2016

Bonjour,
Tu as mis getch(). Mais comme je t'ai dit, c'est _getch() qu'il faut mettre. getch() est obsolète (même si cela fonctionne...).

Après ton char c; tu as 4 a qui sortent de je ne sais où. À supprimer.
Tu as mis 2 fois return 0; L'un des deux est inutie.
Tu as mis char c. Il faut plutôt mettre int c;

if (c == 97)
Evite le code ascii, c'est peu visible. Et du coup, tu peux supprimer le commentaire. De plus, il vaut mieux utiliser le else if.
Cela donne donc else if (c=='a')
A noter que tu peux également utiliser un switch. Ou même te passer de la variable end.
Messages postés
32
Date d'inscription
samedi 11 avril 2015
Statut
Membre
Dernière intervention
10 juin 2016
9
Bonjour,
Désolé pour ce code fait un peu fait à l'arrache, je voulais juste tester mais les codes trouvés sur des forums aident parfois donc je l'ai publier quand même.

J'ai lu sur openclassroom.com (le site du zéro) que pour les caractères, un char était fréquemment utilisé : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/15765-les-chaines-de-caracteres

Voilà le code corrigé : (merci de tes conseils )

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

int main()
{
    int c = 1; // ou char
    printf("0 pour quitter, a pour LA");
    while (c)
    {
        c=_getch(); // la saisie est stockée dans la variable c
        switch (c)
        {
        case 'a' :
                Beep(440,500); // note de 440 hertz, pendant 500ms
            break;

        case '0' :
            c = 0;
            break;

        }

    }

    return 0;
}