Ajouter une valeur a une variable lors de l'appui d'une touche [C] - C - Programmation
Marsh Posté le 10-01-2008 à 15:45:37
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.
Marsh Posté le 10-01-2008 à 15:48:29
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
Marsh Posté le 10-01-2008 à 21:07:57
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
Marsh Posté le 10-01-2008 à 21:46:19
ReplyMarsh Posté le 11-01-2008 à 17:51:59
Joel F a écrit : si tu veut temporiser utilise nanosleep |
Euh, bof... Pas portable. Il faut préciser le contexte...
Marsh Posté le 11-01-2008 à 18:13:51
si je met sleep(100); ça augmente toujours ... mais plus lentement
Marsh Posté le 11-01-2008 à 18:37:52
Emmanuel Delahaye a écrit : |
ha, je pensais que c'etais ISo, je note merci
Marsh Posté le 16-01-2008 à 11:25:44
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"
Marsh Posté le 16-01-2008 à 11:36:38
rarerealities a écrit : a faire en sorte que l'on ne puisse plus augmenter la valeur de sommeil si elle dépasse 100 |
Es-tu conscient qu'un while est une boucle ? Je pense qu'un if devrait suffire. Tu es déjà dans une grande boucle...
Marsh Posté le 16-01-2008 à 19:14:33
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 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
Marsh Posté le 17-01-2008 à 17:51:33
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
Marsh Posté le 17-01-2008 à 19:12:49
On peut voir le nouveau code? Je ne sais pas pourquoi, je ne me sens pas tellement convaincu par ta modif
Marsh Posté le 17-01-2008 à 19:39:31
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
Marsh Posté le 17-01-2008 à 20:00:40
rarerealities a écrit :
|
En gros, il n'y a plus de boucle...
Marsh Posté le 17-01-2008 à 23:08:56
Emmanuel Delahaye a écrit : |
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 . Tout va bien, CQFD.
Marsh Posté le 18-01-2008 à 00:16:51
rarerealities a écrit : do |
Trop bon
Marsh Posté le 18-01-2008 à 09:33:09
Ce topic est collector
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 .... (en espérant que cette infamité est réalisée dans le cadre des études ...)
Marsh Posté le 18-01-2008 à 23:32:11
je ne sais pas ce qu'est un code brainfuck (quoi que...), je n'ai pas de partiels et mon processeur est un AMD 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...
Marsh Posté le 18-01-2008 à 23:44:41
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 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...
Marsh Posté le 18-01-2008 à 23:51:36
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 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.
Marsh Posté le 19-01-2008 à 08:05:16
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 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 :
|
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.
Marsh Posté le 19-01-2008 à 11:51:18
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
Marsh Posté le 10-01-2008 à 15:36:34
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