Jump to content

[C++] - Touche "Entrée" = valeur par défaut ...


Recommended Posts

Hello tout le monde ...

J'ai un ptit problème, qui me semble bien bête ...

Mais je n'arrive pas à trouver une solution simple et propre ...

Mon problème ...

On affiche :

Bonjour utilisateur, rentre un chiffre [2] : _

Si l'utilisateur tape la touche "Entrée", on utilise la valeur par défaut : 2.

Si l'utilisateur tape un chiffre, il faut utiliser la valeur de ce chiffre ...

Je ne sais pas trop comment m'y prendre pour "bien" le faire ...

Dois-je utiliser pour ce faire un char ou un int ?

Je pense qu'il faut utiliser cin.get(maVariable) pour arriver à prendre entrée comme un caractère.

Si j'utilise cin >> maVariable, lorsque je tape entrée, il passe juste à la ligne en attendant un autre caractère ...

Comment voir si l'utilisateur à appuyé sur Entrée ou bien un chiffre ? J'ai déjà essayé de détecter l'appui sur la touche entrée avec '\0x0D', '\CR', '\r', ... Ca ne fonctionne pas :yes:

J'aimerais avoir vos avis :)

Merci

EDIT: J'ai cette solution actuellement :

	
char nbJ;

cout << "Rentre un chiffre [2] : ";
cin.get(nbJ);

//cout << "nbJ:" << (int)nbJ;

// C'est surtout ceci que je n'aime pas ...
if ((int)nbJ == 10)
  nbJ=2;
else
  nbJ-=48;

Link to comment
Share on other sites

tu va l'embrouiller la :|

:censored: , je sais que je suis pas doué dans ce type de programmation mais tout d'même :)

Le c-'0' m'a juste un peu fait peur au début ...

Mais le principe reste le même :(

J'aime pas trop le principe d'enlever 48 (ou '0'), je trouve pas ca très beau, très parlant ...

Enfin, y'a ptetre pas moyen de passer outre :mad:

J'aurais plus pensé à quelque chose du genre :

cin.get(var);
if (var == '\r') var=2;
// c'est tout, si elle n'est pas égal à r, elle contient déjà le chiffre tapé. 

Merci pour ta réponse Théo :incline:

Link to comment
Share on other sites

:transpi:

ATOI(3) Manuel du programmeur Linux ATOI(3)

NOM

atoi,atol, atoll, atoq - Conversion d'une chaA®ne en entier.

SYNOPSIS

#include <stdlib.h>

int atoi (const char *nptr);

long atol(const char *nptr);

long long atoll(const char *nptr);

long long atoq(const char *nptr);

DESCRIPTION

La fonction atoi() convertit le début de la chaîne pointée par nptr en entier de type int. Le résultat est identique A

un appel

strtol(nptr, (char **)NULL, 10);

A la différence que atoi() ne détecte pas d'erreur.

Les fonctions atol() et atoll() se comportent comme atoi(), sauf qu'elles convertissent la portion initiale de la chaîne dans leur

type de retour long ou long long. atoq() est un nom obsolA"te pour atoll().

VALEUR RENVOYAE

Le résultat de la conversion.

CONFORMITA

SVID 3, POSIX, BSD 4.3, ISO/IEC 9899. ISO/IEC 9899:1990 (C89) et POSIX.1 (édition 1996) incluent les fonctions atoi() et atol().

C99 ajoute la fonction atoll().

NOTES

La fonction non-standard atoq() n'est pas présente dans la LibC 4.6.27 ni dans la GlibC 2, mais est présente dans LibC 5 et

LibC 4.7 (bien que ce ne soit qu'une fonction inline dans <stdlib.h> jusqu'A LibC 5.4.44). La fonction atoll() est présente dans

la GlibC 2 depuis 2.0.2, mais pas dans LibC 4 ou Libc4.

VOIR AUSSI

atof(3), strtod(3), strtol(3), strtoul(3)

TRADUCTION

Christophe Blaess, 1996-2003.

:craint:

Link to comment
Share on other sites

Merci pour vos réponses :yes:

Ce truc commence vraiment à m'énerver :transpi:

Problème 1 : atoi()

Bon ... j'ai tenté d'utiliser atoi ... Je n'ai pas vraiment réussi ...

Pour utiliser atoi(), je ne peux pas garder ma déclarion :

char nbJ;

mais je dois avoir ceci :

// Je modifie le nom pour qu'on s'y retrouve mieux;) 
char * nbJstar

Problème :

cin.get() ne fonctionne pas avec un char * en argument. Il faut un char.

Bon ... je n'utilise plus cin.get() alors, mais j'utilise quoi, pour que quand j'appuie sur enter, il prenne ça comme un caractère (et que dans ma console il ne passe pas à la ligne en attendant un "vrai" caractère, comme un chiffre dans mon cas ...)

Quand j'utilise "cin >> nbJstar", le programme se bloque :byebye:

Peut-être scanf ? Mais bon c'est du c++, je ne sais pas si c'est très propre de commencer à mélanger les fonctions c et c++.

Ce n'est qu'un détail ... mais bon ... Ca m'énerve que ça ne fonctionne pas ...

Problème 2 :

J'ai aussi un problème de buffer avec cin.get(var). (Pour ce problème je n'utilise plus nbJstar, mais nbJ)

Par exemple :

cout << "Entrez le nombre de joueurs (2-4) [2] : ";
cin.get(nbJ);
cin.get(nbJ);

Si je rentre 9 et puis enter, il gardera le "caractère" enter dans nbJ ...

Et j'aurai donc un nombre de joueurs égal à 2 (valeur par défaut, [2], quand on appuie sur enter, voir mon premier post), alors que j'en voulais 9.

Je sais qu'il suffit de mettre un seul cin.get(nbJ) pour éviter le problème,

mais je suis dans une autre situation ou je suis "obligé" de réutilisé le cin.get (en cas de nombre non compris entre 2 et 4, je redemande de rentrer un nombre).

Je pourrais bien sur utiliser autre chose que cin.get(), mais j'aurais de nouveau le problème du enter ... (qui ne serait pas pris comme un caractère comme je l'ai déjà expliqué).

J'ai tenté le fflush(stdin) mais ça ne fonctionne pas sur ce coup ...

Encore un détail ... qui m'énerve ...

Bref, beaucoup de prise de tête pour des détails :-D

Help :p

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...