Posté(e) le 10 avril 200619 a 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 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;
Posté(e) le 10 avril 200619 a Une solution simple : #include <stdio.h> int main (void) { char c; long ma_variable=0; ma_variable=( (c=getchar()) != '\n')?c-'0':2; printf ("ma_variable=%ld\n", ma_variable); return 0; }
Posté(e) le 10 avril 200619 a Auteur tu va l'embrouiller la , 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 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
Posté(e) le 10 avril 200619 a J'aime pas trop le principe d'enlever 48 (ou '0'), je trouve pas ca très beau, très parlant ... On s'y fait vite...Sinon atoi si tu as envie de charger ton programme pour rien. Merci pour ta réponse Théo No soucis
Posté(e) le 10 avril 200619 a 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.
Posté(e) le 12 avril 200619 a Auteur Merci pour vos réponses Ce truc commence vraiment à m'énerver 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 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 Help
Posté(e) le 12 avril 200619 a Auteur En fait c'est en gros la même chose que moi mais écrit différemment. Donc oui ça convient :) Dans mon dernier post je parlais de atoi et d'un problème de buffer avec cin.get().
Posté(e) le 12 avril 200619 a Oui, j'ai bien vu, mais je ne vois pas l'utilité de chercher une autre solution plus compliquée
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.