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

Critiquez moi!

un_revenant
un_revenant
Niveau 4
16 mai 2007 à 01:43:49

Salut, ça doit faire une bonne centaine de fois que vous voyez ce genre de prog de n00b mais bon..

Je voulais juste savoir de quelle manière il pourrait être amélioré et savoir s´il y a des trucs à ne pas faire dedans, si c´est bien ordonné etc.. Je suis très ouvert aux critiques alors n´ayez pas peur :sournois:

Le seul truc que je comprends pas c´est que la fonction rand() fonctionne alors que je n´ai rien inclus de plus(je suis sous Linux).

Voilà le lien:
http://pastecode.net/?action=viewpost&tag=1663

Si vous avez des améliorations à apporter, n´hésitez surtout pas!

un_revenant
un_revenant
Niveau 4
16 mai 2007 à 01:45:10

Ah et le prog c´est: devinez le nombre :rouge:

Fvirtman
Fvirtman
Niveau 10
16 mai 2007 à 09:51:23

"Le seul truc que je comprends pas c´est que la fonction rand() fonctionne alors que je n´ai rien inclus de plus(je suis sous Linux). "

--> Parce que ton compilo est gentil, ou alors parce que ta version de iostream include stdlib.h et time.h
Mais il est preférable d´inclure ces 2 headers tout de meme !

Ton main n´a pas de return, alors qu´il est attendu un int, tu n´as pas de warning, ni d´erreurs pour ça ? (Visual C++ genere une erreur pour une fonction qui ne retourne rien alors qu´elle devrait : ça évite d´avoir une valeur imprévisible a la sortie)

Sinon, je trouve ça plutot bien programmé : tu vérifie meme cin.fail(), ce que peut de monde fait (cin et scanf sont de toute façon des fonctions de "debuggage" pleines de failles si j´ose dire : essaie de rentrer une phrase quand il t´es demandé un nombre, il est possible que ça crache)

cin.get() != 0x0A
j´ai peur (mais pas sur) que cela ne soit pas portable de partout, n´y a t il pas un cin.flush() ? que se passe t il si tu as un 0x0D ?

KeepSmile
KeepSmile
Niveau 4
16 mai 2007 à 11:50:50

Je suis du même avis que FVirtman sauf que je rajouterai aussi que pour les fonctions qui contiennent entre 1 et 3lignes tu pourrai utiliser le mot clef ´inline´ qui utilise grandement l´appel de fonction étant donné que quand tu déclare le mot clef ´inline´ il n´y a plus la procédure d´appel de fonction, il fait un copié collé de la fonction la ou il y a l´appel.

(hmmm peut-être mal expliqué, je laisse aux experts la correction :p).

Pour vider le buffer, il y a la méthode flush dans iostream normalement (cin.flush()), sinon fflush(stdin); en C :).

Par contre je vois que tu utilises les entrées sorties C++, mais pourquoi pas utiliser les class ?

un_revenant
un_revenant
Niveau 4
16 mai 2007 à 13:07:25

Merci des commentaires, pour info j´utilise le compilateur g++ et je compile avec cette ligne:

g++ learning.cpp -Wall -o Learn

Je ne connaissais pas cin.flush(). J´ai essayé de l´utiliser mais ça me donne l´erreur:

learning.cpp: In function ‘void ViderBuffer()’:
learning.cpp:59: error: ‘struct std::istream’ has no member named ‘flush’

Pour le reste merci à vous, j´ai mis un return pour main et 2 fonctions inline. Par contre, dois-je inclure <cstdlib> et <ctime> ou vraiment <time.h> et <stdlib.h>?

Il reste juste à comprendre pourquoi cin.flush ne fonctionne pas :(

Voici donc le code légèrement modifié:
http://pastecode.net/cgi-bin/pastecode

dnob700
dnob700
Niveau 10
16 mai 2007 à 13:42:15

pour les en tête, autant utiliser les versions C++ (cstdlib et ctime, qui (très rarement) référence des versions différentes des fonction avec un comportement différent, mais "meilleur", d´autre part, les nom sont mis dans le namespace std (là encore, c´est malheureusement pas toujours le cas) et donc ça peut permettre d´éviter les conflit de nom.

Pour la fonction rand et srand et time, là je ne comprend pas. Si c´était du C, il n´y aurais pas de problème, vu que par hasard ces 3 fonctions prennent un int et renvoient un int, ce qui est le comportement par défaut d´une fonction inconnue en C à la compilation. Puis le linkage réussi, car ces fonctions existent avec le bon type (i.e. en fait c´est seulement la taille des arguments qui compte ici). Mais en C++ le compilo ne devrait pas accepter ça.

Pour les fonctions, les déclarer inline n´est pas très utile, surtout pour des fonctions aussi petite. Il es souvent préférable de laisser le compilo décider s´il faut ou non inliner des fonction (il y a des options de compilation pour ça), car il prend plus de chose en compte quand il le fait. Typiquement, un programme peut parfois avoir interet à être plus petit et donc à tenir dans le cache du processeur, plutôt que d´avoir plein de fonction inliné.

Bref, le compilo est meilleur que toi pour faire ce genre d´optim, donc sauf dans des cas particulier, il vaut mieux le laisser faire.

godrik
godrik
Niveau 30
16 mai 2007 à 17:03:22

En fait la réponse est que le compilo est gentil. GCC connait par défaut toutes les fonctions de la libC et inclut les bon fichier comme il faut.
C´est un comportement franchement discutable, mais il fait comme ca...

un_revenant
un_revenant
Niveau 4
16 mai 2007 à 17:18:53

C´est emmerdant ce prob, maintenant si je veux compiler sur Windows avec VC2005, je sais même pas quels sont les fichiers exacts à inclure.

Sinon petit update pour vider le buffer de cin. Avant j´avais ça:

while( cin.get() != 0x0A );

Mais à ce qu´il paraît, le nouveau standard de 2003 recommande de faire ceci:

cin.ignore(numeric_limits<streamsize>::max(), ´\n´);

Ça fonctionne à merveille, mais je vois pas trop comment ça marche..

PS: J´ai essayé de faire un cin.flush(); mais apparemment la méthode flush() n´existe pas.

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