Entrée sans la touche entrée

Résolu/Fermé
LongAzBan Messages postés 32 Date d'inscription samedi 11 avril 2015 Statut Membre Dernière intervention 10 juin 2016 - 7 juin 2016 à 18:35
 LongAzBan - 16 juin 2016 à 18:14
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.
A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
7 juin 2016 à 22:34
Bonjour,

Rien de standard en C.
Vous souhaitez le faire en console, avec un interface graphique, ou genre un jeu (3D) ?
0
LongAzBan Messages postés 32 Date d'inscription samedi 11 avril 2015 Statut Membre Dernière intervention 10 juin 2016 9
8 juin 2016 à 18:38
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
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
8 juin 2016 à 22:20
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)
0
LongAzBan Messages postés 32 Date d'inscription samedi 11 avril 2015 Statut Membre Dernière intervention 10 juin 2016 9
9 juin 2016 à 18:22
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;
}

0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842 > LongAzBan Messages postés 32 Date d'inscription samedi 11 avril 2015 Statut Membre Dernière intervention 10 juin 2016
9 juin 2016 à 21:21
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.
0
LongAzBan Messages postés 32 Date d'inscription samedi 11 avril 2015 Statut Membre Dernière intervention 10 juin 2016 9
10 juin 2016 à 17:13
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;
}

0