Problème avec le temps en langage C

Fermé
aelegir - 9 févr. 2011 à 14:12
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 13 févr. 2011 à 23:33
Bonjour,
je suis étudiant, et je doit travailler sur un programme en langage C.
j'ai réussi a accomplir tout ce qui était demandé et j'en suis maintenent aux extras de ce programme, mais une procédure ( ou une fonction) me pose probleme, la voici:

je doit demander à un des utilisateurs de rentrer un caractère, si jamais il met plus de 15 secondes a répondre, son tour est passé.

d'habitude j'ai toujours une inspiration pour commencer mais rien a faire, je ne vois pas comment tester le temps en meme temps que de faire un scanf, auriez vous quelques solutions a me proposer?

(sinon il me reste la solution de secour qui est d'évaluer le temps après qu'il est répondu et de ne pas tenir compte de sa réponse si il a mis plus de 15secondes a la donner mais je trouve cela un petit peu vache)

5 réponses

Salut,
Ca doit surement faire partie d'un cours sur les threads ? ; )
0
ejjall Messages postés 6 Date d'inscription mercredi 9 février 2011 Statut Membre Dernière intervention 10 octobre 2012 1
9 févr. 2011 à 16:12
slt,
une solution simple est de récupérer le temps systeme au début de la procédure et le stocker, puis boucler tant que (le temps systeme courant - temps systeme stocké < 15secondes)&&(il n y a pas encore de caractéres reçu).
tu peux chercher sur google comment récupérer le temps systeme.
0
Bilow Messages postés 1022 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 117
9 févr. 2011 à 22:10
Salut !

Il n'y a pas vraiment de solution à cela, pas vraiment en console.

@ejjall : Ecris-nous ce code ! Ou explique précisément comment faire...

Je n'ai pas répondu du premier coup, mais avec la SDL c'est possible :
Une boucle infinie, et qui vérifie si le temps est passé, ensuite si une touche a été enfoncée, alors on réagit. Le problème c'est que c'est la librairie SDL, pas la console... Il faut que tu choisisses. Si tu veux le site officiel de la SDL et le tuto du sdz comprenant la partie SDL.

Je pense quand-même que si c'est possible avec la SDL, alors cela doit être possible avec une autre librairie. Mais je ne sais pas te répondre.

J'espère t'avoir aidé ;)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
9 févr. 2011 à 22:14
La SDL ? Carrément ? lol.

Sur Windows, tu as la fonction _kbhit dans <conio.h> qui va te permettre de réaliser ton besoin. Demande, si tu souhaites sur un autre système d'exploitation.

Cdlt,
0
Bilow Messages postés 1022 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 117
9 févr. 2011 à 22:25
C'est ca que je dis =D Si sous la SDL c'est possible, alors il existe bien une autre librairie offrant cette possibilité ;)
0
merci je vais essayer cela ce soir, je vous tient au courant
0
je suis sur ubuntu, je compile avec gcc, donc voila je ne suis pas sous windows donc je vois pas trop comment faire.

sinon ejjall, j'ai déja pensé a ce que tu m'as dit et j'ai trouvé quelque chose qui s'en approche:


#include <stdio.h>
#include <time.h>

int main(void) {
char caractere;
time_t t0,t1;
printf("entrer une lettre\n");
time(&t0);
while((t1-t0)<15||scanf("%c"&caractere)!=1)
time(&t1);
return 0;
}

le seul probleme réside dans le fait que le scanf ne teste pas si il y a quelque chose dans le buffer, il attend juste que on lui rentre une valeur.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
11 févr. 2011 à 23:16
C'est pour ça que je t'ai conseillé d'utiliser _kbhit()...
Cdlt,
0
ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 338
13 févr. 2011 à 23:09
Tu dois utiliser des threads. Sous quelle plateforme travailles-tu ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
13 févr. 2011 à 23:33
Toujours pas réglé ce topic ?
Juste deux fonctions : _kbhit() et clock(). Si ce n'est pas sur windows, il est possible de fabriquer _kbhit() en 5-6 lignes.
Cdlt,
0