Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2898 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Ajouter une valeur a une variable lors de l'appui d'une touche

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Ajouter une valeur a une variable lors de l'appui d'une touche

n°1669062
rarerealit​ies
Posté le 10-01-2008 à 15:36:34  profilanswer
 

Bonjour !
Je voudrai savoir comment augmenter la valeur d'une variable par appuie d'une touche, on doit pouvoir par la suite augmenter cette valeur lorsque la touche est réappuyée a n'importe quel moment.  
 
J'ai testé :
 
if(kbhit()) menu_touche=getch();
      switch (menu_touche)
        {
        case 's' : do
                   {
                   sommeil=sommeil+1;
                   }while (sommeil <= 100);
                   break;
         }
 
dans une grande boucle "do while" mais le problème est que lorsque j'appuyes une fois sur 's' ma valeur sommeil monte jusqu'a 100.  
 
Comment faire pour qu'elle augmente que d'un seul "pallier" a la fois.
 
merci :)


Message édité par rarerealities le 16-01-2008 à 11:26:00
mood
Publicité
Posté le 10-01-2008 à 15:36:34  profilanswer
 

n°1669071
Koyomi
www.sebastiengilles.com
Posté le 10-01-2008 à 15:41:14  profilanswer
 

Euh ... tu comprend le code que tu écrit ?

n°1669087
rarerealit​ies
Posté le 10-01-2008 à 15:45:37  profilanswer
 

bin je pense, menu_touche est la variable contenant la touche que l'utilisateur appuie, je fais un switch après pour pouvoir mettre plusieurs touches, et si (dans ce cas) la touche est 's' la variable sommeil devrait etre augmentée de 1, et elle doit valoir au maximum 100.

n°1669094
Koyomi
www.sebastiengilles.com
Posté le 10-01-2008 à 15:48:29  profilanswer
 

Alors le code que tu as écrit c'est :
 
SI la touche appuyée est le : s
ALORS
   REPETER
      Sommeil = Sommeil + 1
   TANT QUE Sommeil EST PLUS GRAND OU EGAL A 101

n°1669308
rarerealit​ies
Posté le 10-01-2008 à 21:07:57  profilanswer
 

pourtant si met while (sommeil <= 101); et que j'appuie sur 's' le compteur défile indéfiniment :??: j'ai aussi testé for(i=0;i<=1;i++) ça ne marche pas non plus :(

n°1669326
Joel F
Real men use unique_ptr
Posté le 10-01-2008 à 21:46:19  profilanswer
 

si tu veut temporiser utilise nanosleep

n°1669852
Emmanuel D​elahaye
C is a sharp tool
Posté le 11-01-2008 à 17:51:59  profilanswer
 

Joel F a écrit :

si tu veut temporiser utilise nanosleep


Euh, bof... Pas portable. Il faut préciser le contexte...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1669860
rarerealit​ies
Posté le 11-01-2008 à 18:13:51  profilanswer
 

si je met sleep(100); ça augmente toujours ... mais plus lentement :D

n°1669870
Joel F
Real men use unique_ptr
Posté le 11-01-2008 à 18:37:52  profilanswer
 

Emmanuel Delahaye a écrit :


Euh, bof... Pas portable. Il faut préciser le contexte...


 
ha, je pensais que c'etais ISo, je note merci :jap:

n°1671720
rarerealit​ies
Posté le 15-01-2008 à 18:49:41  profilanswer
 

n'idée ? :)

mood
Publicité
Posté le 15-01-2008 à 18:49:41  profilanswer
 

n°1671912
Ace17
Posté le 16-01-2008 à 07:45:04  profilanswer
 

Bon, pour commencer, il sert a quoi ton while ?

n°1671996
rarerealit​ies
Posté le 16-01-2008 à 11:25:44  profilanswer
 

a faire en sorte que l'on ne puisse plus augmenter la valeur de sommeil si elle dépasse 100
"tant que sommeil est inférieur a 100, on peut faire ce qui est avant"

Message cité 2 fois
Message édité par rarerealities le 16-01-2008 à 11:26:43
n°1672010
Emmanuel D​elahaye
C is a sharp tool
Posté le 16-01-2008 à 11:36:38  profilanswer
 

rarerealities a écrit :

a faire en sorte que l'on ne puisse plus augmenter la valeur de sommeil si elle dépasse 100
"tant que sommeil est inférieur a 100, on peut faire ce qui est avant"


Es-tu conscient qu'un while est une boucle ? Je pense qu'un if devrait suffire. Tu es déjà dans une grande boucle...
 
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1672466
Ace17
Posté le 16-01-2008 à 19:14:33  profilanswer
 

rarerealities a écrit :

a faire en sorte que l'on ne puisse plus augmenter la valeur de sommeil si elle dépasse 100
"tant que sommeil est inférieur a 100, on peut faire ce qui est avant"


tant que sommeil est inferieur a 100, on REPETE ce qui est avant. Donc forcement, si tu appuies sur une touche une seule fois, ta boucle va tourner cent fois ...
-> Revoir ton bouquin de C sur do {} while

n°1672919
rarerealit​ies
Posté le 17-01-2008 à 17:51:33  profilanswer
 

j'ai réussi, en fait il suffisait de mettre menu_touche=0; dans ma boucle, comme ça la valeur de la variable n'augmentait plus toute sule, merci a tous :)

n°1672945
Ace17
Posté le 17-01-2008 à 19:12:49  profilanswer
 

On peut voir le nouveau code? Je ne sais pas pourquoi, je ne me sens pas tellement convaincu par ta modif :D

n°1672963
rarerealit​ies
Posté le 17-01-2008 à 19:39:31  profilanswer
 

do  
  {
             //actions de l'utilisateur sur la bête
   
             
  if(kbhit()) menu_touche=getch();
      switch (menu_touche)
        {
        case 's' : do
                   {
                   sommeil = sommeil+1;
                   menu_touche=0;
                   }while (sommeil >=101);
                   break;
 
 
...
 
 
}while (menu_touche != 'q');
 
 
ça te plaira certainement pas mais ça fait ce que je veux :D

n°1672970
Emmanuel D​elahaye
C is a sharp tool
Posté le 17-01-2008 à 20:00:40  profilanswer
 

rarerealities a écrit :


Code :
  1. if(kbhit()) menu_touche=getch();
  2.       switch (menu_touche)
  3.         {
  4.         case 's' : do
  5.                    {
  6.                    sommeil = sommeil+1;
  7.                    menu_touche=0;
  8.                    }while (sommeil >=101);
  9.                    break;




En gros, il n'y a plus de boucle...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1673056
tpierron
Posté le 17-01-2008 à 23:08:56  profilanswer
 

Emmanuel Delahaye a écrit :


En gros, il n'y a plus de boucle...


 
Ah ben si justement, il va y en avoir une ...
 
Quand "sommeil" va atteindre 100, son while va parcourir tout l'intervalle du type (très certainement un int sur une machine 32bits).
 
P...n, je viens de faire vite fait un test : sur un Core 2 duo à 2Ghz, il ne met que 8secondes pour itérer sur 4milliards de valeurs. Donc quand Intel nous sortira une version à 16Ghz, le temps d'attente ne sera que d'une seconde, et passera certainement inaperçu [:matleflou] . Tout va bien, CQFD.

n°1673077
Ace17
Posté le 18-01-2008 à 00:16:51  profilanswer
 

rarerealities a écrit :

do  
  {
             //actions de l'utilisateur sur la bête
   
             
  if(kbhit()) menu_touche=getch();
      switch (menu_touche)
        {
        case 's' : do
                   {
                   sommeil = sommeil+1;
                   menu_touche=0;
                   }while (sommeil >=101);
                   break;
 
 
...
 
 
}while (menu_touche != 'q');
 
 
ça te plaira certainement pas mais ça fait ce que je veux :D


Trop bon :D

n°1673124
Koyomi
www.sebastiengilles.com
Posté le 18-01-2008 à 09:33:09  profilanswer
 

Ce topic est collector  :sol:  
 
Je me rend compte que ma première impréssion etait tellement vrai ....
 

Citation :

  Euh ... tu comprend le code que tu écrit ?
 


La magie de l'incompréhension fait que le résultat immonde trouvé retourne le résultat attendu.
 
Il en sera d'une autre histoire au partiels ....  :sarcastic:  (en espérant que cette infamité est réalisée dans le cadre des études ...)

n°1673515
leo++
Chef de file indienne
Posté le 18-01-2008 à 17:18:38  profilanswer
 

Tu tentes un portage depuis un code brainfuck ?

n°1673635
rarerealit​ies
Posté le 18-01-2008 à 23:32:11  profilanswer
 

je ne sais pas ce qu'est un code brainfuck (quoi que...), je n'ai pas de partiels et mon processeur est un AMD [:feyd] sinon mon objectif est décrit dans les 2ème et 3ème lignes de mon premier post, j'ai juste fait une proposition dans l'espoir qu'on m'aide a l'améliorer, ou que qqn en fasse une plus "intelligente", si c'est complètement faux indiquez moi par où recommencer ou une idée mais arrêtez de m'enfoncer c'est pas franchement constructif...

Message cité 3 fois
Message édité par rarerealities le 18-01-2008 à 23:32:39
n°1673640
Emmanuel D​elahaye
C is a sharp tool
Posté le 18-01-2008 à 23:44:41  profilanswer
 

rarerealities a écrit :

je ne sais pas ce qu'est un code brainfuck (quoi que...), je n'ai pas de partiels et mon processeur est un AMD [:feyd] sinon mon objectif est décrit dans les 2ème et 3ème lignes de mon premier post, j'ai juste fait une proposition dans l'espoir qu'on m'aide a l'améliorer, ou que qqn en fasse une plus "intelligente", si c'est complètement faux indiquez moi par où recommencer ou une idée mais arrêtez de m'enfoncer c'est pas franchement constructif...


On t'a déjà donné une solution simple... Si tu n'en tiens pas compte, on y peut rien...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1673642
leo++
Chef de file indienne
Posté le 18-01-2008 à 23:51:36  profilanswer
 

rarerealities a écrit :

je ne sais pas ce qu'est un code brainfuck (quoi que...), je n'ai pas de partiels et mon processeur est un AMD [:feyd] sinon mon objectif est décrit dans les 2ème et 3ème lignes de mon premier post, j'ai juste fait une proposition dans l'espoir qu'on m'aide a l'améliorer, ou que qqn en fasse une plus "intelligente", si c'est complètement faux indiquez moi par où recommencer ou une idée mais arrêtez de m'enfoncer c'est pas franchement constructif...


 
Ton code ne tiens pas debout, il te manque les notions de base. A ce moment précis, ce qu'il te faudrait ce n'est pas des conseils c'est une formation.
 
Pour dire autrement, la solution de ton probleme est triviale mais tu ne comprendrais pas la correction étant donné qu'il est évident que tu ne maitrise pas les outils élémentaires (boucles, conditions ...) d'un langage: tu patauges.
Regarde des tutoriaux sur le net, achete toi un bon bouquin de C, et tu verras de toi meme comment atteindre ton but (ton logiciel, je suppose qu'il ne fait pas que compter le nombre d'appuis sur une touche ;) ). A ce moment là, on pourra t'aider à résoudre tes problemes.


Message édité par leo++ le 18-01-2008 à 23:52:09
n°1673692
Ace17
Posté le 19-01-2008 à 08:05:16  profilanswer
 

rarerealities a écrit :

je ne sais pas ce qu'est un code brainfuck (quoi que...), je n'ai pas de partiels et mon processeur est un AMD [:feyd] sinon mon objectif est décrit dans les 2ème et 3ème lignes de mon premier post, j'ai juste fait une proposition dans l'espoir qu'on m'aide a l'améliorer, ou que qqn en fasse une plus "intelligente", si c'est complètement faux indiquez moi par où recommencer ou une idée mais arrêtez de m'enfoncer c'est pas franchement constructif...


 
Allez, c'est mon jour de bonte... meme si c'est pas du tout le role de ce forum de t'expliquer des trucs aussi basiques.

Code :
  1. {
  2.                    sommeil = sommeil+1;
  3.                    menu_touche=0;
  4.                    }while (sommeil >=101);
  5.                    break;


Mettons que tu appuies sur une touche, et que sommeil vaille zero. Voici ce qui se passe :
- sommeil = sommeil + 1  
- menu_touch = 0
- est-ce que sommeil >= 101 ? non
- break du switch.
 
Maintenant si sommeil vaut initialement 100.  
- sommeil = sommeil + 1
- menu_touch = 0
- est-ce que sommeil >= 101 ? oui : recommencer la boucle
- sommeil = sommeil + 1
- menu_touch = 0
- est-ce que sommeil >= 101 ? oui : recommencer la boucle  
- sommeil = sommeil + 1
- menu_touch = 0
- est-ce que sommeil >= 101 ? oui : recommencer la boucle  
- sommeil = sommeil + 1
- menu_touch = 0
- etc.
 
Dans ce cas la valeur de sommeil va augmenter jusqu'a la valeur maximum de ta variable. A ce moment la, ca va boucler et rebasculer a zero, et le test de ta boucle va echouer.  
Je ne pense pas que ce soit ce que tu cherches a faire.

n°1673708
rarerealit​ies
Posté le 19-01-2008 à 11:51:18  profilanswer
 

en fait ma valeur de sommeil est déjà comprise (aléatoirement) entre 0 et 100 lorsqu'elle arrive dans le switch, quoi qu'il en soit j'irai acheter un livre de C un de ces jours :p

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Ajouter une valeur a une variable lors de l'appui d'une touche

 

Sujets relatifs
Incrementer une variable dans inputbox[BASH] test si variable contient ./* [Résolu]
Rentrer beaucoup de valeur.[PHP] Construire nom variable pour travail sur grand nombre de champs
Transmission d'un variable de page en page...Récupérer variable php en Ajax
VBS - Récuperer la valeur d'une cellule excelTest d'apuie sur touche spécial
[Struts]Probleme récupération de la valeur d'un html:selectIE6 + problème UTF-8 ISO + javascript
Plus de sujets relatifs à : [C] Ajouter une valeur a une variable lors de l'appui d'une touche


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR