CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

printf("blabla");

Pseudo supprimé
Pseudo supprimé 21 août 2013 à 23:39:47

Je vais jeter un coup d'oeil à ton code pour voir, tu as déjà quelque warning dedans :o))

Pseudo supprimé
Pseudo supprimé 21 août 2013 à 23:55:46

D'ailleurs simple question, pourquoi utilises-tu getline ?

Pseudo supprimé
Pseudo supprimé 21 août 2013 à 23:58:53

http://pastebin.com/DBgWAugx

J'ai simplifié ton code, j'ai enlevé les variables que tu n'utilisais et effacer les doublons des variables utilisateurs (car tu n'en a pas besoin pour l'instant)

Jette un coup d'oeil au code, tu verras que j'ai ajouté le \n, observe ce que ça fait quand tu lances le programmes :o))

Pseudo supprimé
Pseudo supprimé 22 août 2013 à 00:03:26

Ah en effet je vois. Mais ton problème vient tout de même de ce que je pensais.

En fait, quand tu fais enter après avoir entré le nom d'utilisateur, le fameux \n reste en mémoire (dans le tampon, l'endroit où est temporairement gardé en mémoire ce que tu entres au clavier par exemple).

A la prochaine utilisation, getline rencontre \n dans le tampon, et le stock dans la variable nom_utilisateur. Voilà pourquoi.

Tu verras probablement plus loin dans le cours un moyen d'écrire une fonction de saisie sécurisée.

Concrètement, il faut vider le tampon du fameux "\n"

Pseudo supprimé
Pseudo supprimé 22 août 2013 à 00:05:06

Xantown7, je sais, mais compile juste et regarde ce qu'il se passe. Ce code est juste là pour te faire comprendre l'erreur.

De plus tu devrais malgré tout prendre l'habitude d'écrire du code plus simplement, sinon tu vas le payer cher en habitude par après :o)) Bon ok au début c'est pas trop grave.

Pseudo supprimé
Pseudo supprimé 22 août 2013 à 00:13:04

Xantown7, je sais, justement. Il saute la ligne du pi, car il reste le caractère \n en mémoire, que la fonction pi va utiliser.

Tu comprends ?

Pour que ce ne problème n'arrive pas, tu dois effacer le \n du tampon. Il y a plusieurs manière de faire ça.

Pseudo supprimé
Pseudo supprimé 22 août 2013 à 00:14:24

Plus précisément, quand tu mets un nom avec un espace, il va rentrer dans ta variable nom_utilisateur tout ce qui se trouve avant l'espace. Tout ce qui se trouve après est encore dans le tampon !

Comme il croise ça dans le tampon, il veut le rentrer dans la variable suivante, et ainsi de suite...

Pseudo supprimé
Pseudo supprimé 22 août 2013 à 00:25:13

La meilleure façon de faire selon est de te créer une fonction de saisie sécurisée, mais ça te demande + de connaissances, donc laisse tomber ça pour le moment.

Tu peux simplement te contenter vider le buffer.

Doit probablement avoir une fonction qui fait ça mais je ne connais pas + que ça le C++, je vais y jeter un oeil.

Pseudo supprimé
Pseudo supprimé 22 août 2013 à 00:35:35

Il explique dans ton tuto une parade en plus (me parait douteuse mais pour commencer c'est pas mal)

Place cin.ignore(); après la saisie de l'âge de l'utilisateur.

Pseudo supprimé
Pseudo supprimé 22 août 2013 à 00:41:07

Je te conseil même plutôt d'écrire ça :

cin.ignore(1, '\n');

Et de mettre un commentaire après. Ainsi tu te souviendras du pourquoi du comment.

Pour te résumer ton problème :

Quand tu valide ton âge, en appuyant sur enter, le caractère de retour de ligne ou retour de chariot \n reste dans un tampon (un endroit pour stocker temporairement ce que tu écris).

Quand tu veux lire le nom après avec getline, il trouve le \n et considère que c'est ça qu'il faut mettre dans la variable nom_utilisateur.

Pseudo supprimé
Pseudo supprimé 22 août 2013 à 00:44:05

Non mais je trouve ça bien, ça veut dire que tu testes du code par toi même. Je trouve bizarre dans ton tutoriel qu'il n'explique pas ce que fait cin.ignore();.

Je te conseil même de mettre plutôt ça :

cin.ignore(1, '\n');

Après les paramètres dépendent de ce que tu voudras.

Tu n'es pas bête d'avoir demandé, car il n'explique même pas d'où vient le problème dans ton tuto...

Pseudo supprimé
Pseudo supprimé 22 août 2013 à 00:45:36

Et si tu te demandes pourquoi je te conseille plus tard d'écrire une fonction de saisie sécurisée, fais ceci :

Quand il te demande ton âge, marque lui non pas des chiffres mais des lettres :o))
Tu auras une bonne surprise... (ça n'explose pas je t'assure)

Pseudo supprimé
Pseudo supprimé 22 août 2013 à 01:01:05

Je trouve ça douteux car j'imagine qu'écrire cin.ignore(); va ignorer tout ce qui a été écrit précédemment (pas sûr), alors qu'écrire cin.ignore(1, '\n'); montre le problème clairement.

Le 1 c'est le nombre de caractère à ignorer :p)

Pseudo supprimé
Pseudo supprimé 22 août 2013 à 01:12:42

Bon après je parle de fonction, je devrais plutôt dire méthode pour le C++.

Tu peux également lire ceci si tu veux connaître le problème décrit d'une meilleure façon :

http://www.siteduzero.com/informatique/tutoriels/la-saisie-securisee-en-c/fonctionnement-de-cin

Tu y verras plus clair :)

Pseudo supprimé
Pseudo supprimé 22 août 2013 à 01:25:38

De rien :o)) Tout de même bizarre qu'il n'a pas indiqué ça dans son tuto, m'enfin peut être qu'il est occupé à faire une mise à jour du tuto.

ryviel
ryviel
Niveau 5
22 août 2013 à 02:45:42

Bon j'arrive un peu tard et j'suis un peu à côté de mes pompes vu l'heure, mais pour ton problème de "\n" qui empêche la saisi du prochain getline, est-ce que l'utilisation de la combinaison CTRL+D au lieu de la touche "entrée" pour terminer le premier getline fonctionne ?

ryviel
ryviel
Niveau 5
22 août 2013 à 03:17:51

Désolé du double post :(

Je viens de tester le CTRL+D avant d'aller me coucher.
J'ai donc rentré mon âge, puis CTRL+D. Rien ne se passe, CTRL+D de nouveau, et il passe directement à "pi". Par contre, en ajoutant un espace après l'âge, puis CTRL+D, tout se passe comme convenu.
(je parle bien sur du premier code qui a été fournit)

Bon, si quelqu'un peut approfondir pourquoi sans espace cela ne fonctionne pas ^^
Perso, je vais me coucher :p

Pseudo supprimé
Pseudo supprimé 22 août 2013 à 05:10:16

Moi sinon j'ai toujours mon petit problème de FPS :o)) C'est purement mathématique, je dois me tromper quelque part...

donc je récupère le temps écoulé entre les deux boucles. Mais ensuite ? Il faut bien effectuer un calcul pour le nombre de fps.

Je serais tentée de faire 1.0/le temps écoulé entre les deux boucles mais ça ne me donnera que les fps pour autant de millisecondes. Je vais me coucher je n'arrive plus à fréfléchir :o)

chris_27
chris_27
Niveau 10
22 août 2013 à 12:11:19

fps = frame par seconde.

Toi, tu calcules des fpms = frames par milliseconde. C'est pas bien dur de passer de l'un à l'autre.

Paulop
Paulop
Niveau 12
22 août 2013 à 15:07:07

Si tu fais comme j'ai dit, attendre 1 seconde pour afficher le nombre de frame qu'il y à eu en une seconde, tu devrais pas avoir ce soucis.

Tu as juste à faire attention à bien accumuler jusqu'à une seconde. Si ton deltatime est en MS il te suffit d'accumuler ton deltatime jusqu'à qu'il atteigne 1000.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment