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

Lire une ligne d'un fichier C++

naruto_forever
naruto_forever
Niveau 10
19 décembre 2007 à 13:53:31

Salut tout le monde !
Je programme en ce moment un logiciel permettant de faire des trucs et d´autres :lol: c´est pas le problème.
Je veux faire une fonction qui compte le nombre de ligne d´un fichier ( en C++ ), qui tire un nombre aléatoire entre 0 et le nombre de lignes, puis qui lit la ligne choisie. Tout va bien jusqu´à ce dernier point. Je vous mets mon code comme ça vous pourrez voir par vous même le problème.
http://rafb.net/p/BkM2Hp35.html
ce que me fait mon programme, c´est qu´il choisit bien la ligne aléatoirement, mais le getline ne se fait pas au moment où le i est atteint, mais après, donc à chaque fois il me mets le dernier élément de mon fichier txt. Help me please =D

godrik
godrik
Niveau 30
19 décembre 2007 à 14:51:18

Ce n´est pas tres etonnant qu´il se passe quelquechose de bizzare.
Tu devrais arreter ta boucle une fois que ta ligne a été trouvé.
du genre:
http://rafb.net/p/t8RksO47.html

naruto_forever
naruto_forever
Niveau 10
19 décembre 2007 à 15:13:58

Ha oui merci, mais je pensais que comme j´avais mis en paramètre du deuxième while i != ligne, la boucle allait s´arrêter en la trouvant . C´est bizzare, pourquoi la boucle s´arrête pas ? En tout casm erci godrik :)

godrik
godrik
Niveau 30
19 décembre 2007 à 15:39:24

pour le compilateur tu fais deux boucles parfaitement différente et avec des conditions d´arret completement differente. Tu pourrais vraiment vouloir faire cela...

naruto_forever
naruto_forever
Niveau 10
19 décembre 2007 à 15:47:17

Ok merci, au moins maintenant je le sais ^^
Hum ... Autre problème : j´utilise une fonction rand dans mon code mais quand je fais une boucle de la fonction rand, elle m´indique quand même le même chiffre à chaque fois ( vive le hasard ). Le nombre "aléatoire" est basé sur un calcul du temps non ? Alors comment faire pour avoir un nombre différent à chaque passage ?

elhuron
elhuron
Niveau 6
19 décembre 2007 à 15:52:05

Salut.
http://perso.numericable.fr/fvirtman/info/tuto/1_16_rand.cpp

naruto_forever
naruto_forever
Niveau 10
19 décembre 2007 à 15:57:22

Hum excusez-moi je me suis trompé, j´utilise déjà srand :s
Ma fonction aléatoire :

int min = 1;
int max = TypeFichier.GetLignes(fichier); // fonction pour définir le nombre de lignes du fichier
srand(time(NULL));
return (rand() % ( max - min + 1)) + min;

godrik
godrik
Niveau 30
19 décembre 2007 à 16:29:07

ce que tu fais m´a l´air correcte.
Une remarque, on prefere ne pas utiliser l´operateur modulo avec les generateurs aleatoire.
http://www.mandragor.org/article.php?id=12

naruto_forever
naruto_forever
Niveau 10
19 décembre 2007 à 17:15:01

Ma fonction ne fonctionne pas pourtant, enfin ça me tire toujours le même nombre aléatoire :
http://img147.imageshack.us/my.php?image=alatoireaq6.png

Dans ta page tu ne dis pas pourquoi il ne faut pas utiliser modulo ( ou alors j´ai mal lu ) ?

godrik
godrik
Niveau 30
19 décembre 2007 à 17:27:16

tu as mal lu :)

heu, tu ne fais le srand qu´au début de ton programme hein ?

naruto_forever
naruto_forever
Niveau 10
19 décembre 2007 à 18:00:12

Non, je relance la fonction dites plus haut.

naruto_forever
naruto_forever
Niveau 10
19 décembre 2007 à 18:10:08

A l´aide de différents tests, j´ai trouvé ce qui cloche :
c´est la fonction srand. Elle se base sur le temps et avec un test simple j´ai remarqué que la variable ( qui reste la même d´habitude ) change toute les secondes ( à intervalles régulier ). Il me faudrait donc une fonction plus aléatoire, existe-t´elle ?

dnob700
dnob700
Niveau 10
19 décembre 2007 à 20:32:03

non ce qu´il faut faire c´est appeler srand une seule fois au début de ton programme. Ça initialise le générateur de nombre aléatoire et après tu utilise rand, mais plus srand.

Sinon, effectivement durant une seconde (et une seconde c´est long en informatique) à chaque appel de srand(time(null)), le générateur de nombre aléatoire est remis à la même position et donc rand te renvoie le même chiffre.

Bref, rand est assez mauvais, mais pour des cas simple il est nettement suffisant, mais il ne faut pas utiliser srand tout le temps.

naruto_forever
naruto_forever
Niveau 10
19 décembre 2007 à 22:24:35

Tu es mon sauveur dnob :D

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