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

J´aide les personne en C/C++

TNToon
TNToon
Niveau 9
16 décembre 2006 à 16:41:31

Salut, j´ai une petite question, plus particulièrement à toi Fvirtman : dans tes cours C++, annexe I.2: "L´accès en C++ (iostream)", et bien voilà c´est tout bête mais il ne reconnait ofstream, j´inclue pourtant bien fstream mais ça ne marche pas... Je suis en train de passer du C au C++ donc peut-être qu´il y a des modifications à faire au niveau IDE ? ... Voilà merci !

godrik
godrik
Niveau 30
16 décembre 2006 à 16:52:37

tu fais bien

  1. include <iostream>
  2. include <fstream>

std::ofstream
?

TNToon
TNToon
Niveau 9
16 décembre 2006 à 17:00:39

"#include <iostream>

  1. include <fstream>

using namespace std;

....

ofstream fichier_erreurs("fichier_erreurs.txt", ios::app);
fichier_erreur << "Erreur blabla..." << endl;
exit(EXIT_FAILLURE);"

Comme ici :
http://perso.numericable.fr/~fvirtman/info/tuto/I_2_01_ofstream.cpp

godrik
godrik
Niveau 30
16 décembre 2006 à 17:07:22

quel est le message d´erreur que tu obtiens ?

TNToon
TNToon
Niveau 9
16 décembre 2006 à 17:17:37

Euh sur le code au dessus j´ai fais une petite erreur sur le FAILURE, sinon j´ai l´erreur : "ofstream undeclared", "excepted ´;´ before ´fichier_erreurs´", "fichier_erreur undeclared" et même "endl undeclared" :s !

godrik
godrik
Niveau 30
16 décembre 2006 à 17:35:28

atta, tu ne donnes pas le meme code des deux coté.

ofstream fichier_erreurs("fichier_erreurs.txt", ios::app);
fichier_erreur << "Erreur blabla..." << endl;

De plus, en premiere ligne tu as mis fichier_erreurS donc c´est normal que ca ne marche pas.

Fvirtman
Fvirtman
Niveau 10
16 décembre 2006 à 17:38:23

Bizarre, normalement "fstream" et "iostream" sont reconnus sous tous les compilos.
Essaie de reduire le programme a seulement ça :

  1. include <iostream>
  2. include <fstream>

using namespace std;

int main()
{
ofstream O("c:/test.txt");
O.close();
return 0;
}

regarde si ça se lance.

TNToon
TNToon
Niveau 9
16 décembre 2006 à 17:45:40

Ah, ça, ça marche, je dois avoir un prob dans mon code alors :
/* Includes */

  1. include <iostream>
  2. include <fstream>
  3. include <SDL/SDL.h>
  4. include <SDL/SDL_ttf.h>
  5. include <SDL/SDL_image.h>
  6. include "constantes.h"
  7. include "gestion_clavier.h"

int main(int argc, char *argv[])
{
/* Booléens */
bool touchesAppuyees[NOMBRE_TOUCHES] = {false};
bool jeuEnCours = true;

/* Variables SDL */
SDL_Surface *ecran = NULL;

/* Chargement de la SDL et gestion de l´erreur */
if (SDL_Init(SDL_INIT_VIDEO) == -1) // Mode vi
déo
{
ofstream fichier_erreurs("fichier_erreurs.txt", ios::app);
fichier_erreurs << "Impossible de charger la SDL : " << SDL_GetError();
exit(EXIT_FAILURE); // Quitte le programme

}

/* Chargement de SDL_ttf et gestion de l´erreur */
if (TTF_Init() == -1)
{
exit(EXIT_FAILURE);
}

ecran = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE, 32, SDL_HWSURFACE);
if (ecran == NULL) // En cas d´erreur
{
exit(EXIT_FAILURE);
}

/* Boucle principale */
while (jeuEnCours)
{
gestionClavier(touchesAppuyees);

if (touchesAppuyees[QUITTER])
jeuEnCours = false;
}

/* Libération de la mémoire */
SDL_Quit();
TTF_Quit();

return EXIT_SUCCESS;
}

TNToon
TNToon
Niveau 9
16 décembre 2006 à 17:46:12

Désolé j´ai posté pas mal de truc qui ne servent pas dans mon problème mais bon. Au cas où...

elhuron
elhuron
Niveau 6
16 décembre 2006 à 18:08:41

Bonsoir!

Dans la librairie SDL, une fonction permet d´y inserer le nombre d´argument que l´on veux :
SDL_SetVideoMode(1024, 768, 32,
SDL_DOUBLEBUF|SDL_SWSURFACE|SDL_FULLSCREEN|...|...
);

J´aimerai moi aussi faire une fonction a nombre d´arguments non definies.

C´est difficile a faire?
Vous auriez pas un petit exemple simple d´utilisation?

Merci :)

Fvirtman
Fvirtman
Niveau 10
16 décembre 2006 à 18:18:52

TNToon > étrange, ton code a l´air pourtant bon.
Si celui que je t´ai proposé plus haut marche, essaie progressivement de désactiver quelques trucs, épure, et surtout, vérifie la casse.

ElHuron > cette technique d´utilisation (avec des |, n´est en aucun cas des parametres variables :) c´est une gestion de flags, tout simplement, fait par une astuce sympa, que je vais expliquer plus bas.
Pour de vrais arguments variables, regarde mon tuto §G.17 (stdarg)

Pour le truc de SDL, voici un exemple :

  1. define PARAM1 1
  2. define PARAM2 2
  3. define PARAM3 4
  4. define PARAM4 8
  5. define PARAM5 16

Comme tu vois, ces nombres sont uniquement des puissances de 2.

Si tu les mets en binaire, ça fait :
1
10
100
1000
10000
...

Si tu fais un | logique dessus, ça cumulera
par exemple :

10 | 1000 = 1010 -> tu as ainsi 2 flags d´activés.

Entete de fonction :

int fonction(int flags)

Pour relire ça dans ta fonction, tu fais simplement :

if (flags&PARAM1)
{
// code a faire si le param 1 est activé.
}

TNToon
TNToon
Niveau 9
16 décembre 2006 à 18:23:37

Sympa cette astuce ! Mais je comprends pas la ligne du if : if (flags&PARAM1) ?

elhuron
elhuron
Niveau 6
16 décembre 2006 à 18:27:50

Ok, bien pensee cette astuce :)
Merci FVirtman!

Je suis en train de me fabriquer plusieur classes, Image, Texte, Touche.

Touche touche;
Image ours(..., ..., ...);

if(touche.pressee(HAUT|GAUCHE))
ours.deplacer(-5, -5);

Jvais essayer d´appliquer cette methode.

TNToon
TNToon
Niveau 9
16 décembre 2006 à 18:32:06

Ah j´ai compris pour &PARAM1 en lisant ton tutos sur les bits. Désolé pour les multi posts ^^

elhuron
elhuron
Niveau 6
28 décembre 2006 à 20:46:04

Bonsoir :)

J´utilise la gestion de la majuscule a l´aide de la SDL. Pour cela, si la touche SHIFT gauche est enfoncée, la lettre enfoncé sera en consequent en majuscule.

Mais cette touche SHIFT gauche, je n´arrive pas a la trouver, ou bien alors elle ne fonctionne pas.
Je crois que c´est : SDLK_LSHIFT.

PS : Le probleme vient du nom de la touche, car en indiquant SDLK_UP a la place du shift, ca fonctionne correctement.

Sinon, encore une deuxieme question :

J´ai une chaine :
char *chaine = "salut";

La chaine est constituée de :
s
a
l
u
t
\0

Je voudrais savoir, si je met a la place du t un \0, la derniere s´annule :
s
a
l
u
\0

Ou bien alors, elle reste, comme cice :
s
a
l
u
\0
\0

Merci :)

KeepSmile
KeepSmile
Niveau 4
28 décembre 2006 à 21:52:16

ta chaine sera de forme :
s
a
l
u
\0
\0

mais quand tu l´affichera, ca mettra : salu, car la lecture des tableaux de caractére s´arrete au caractére \0.

Pour la SDL, je peux pas trop t´aider, j´avais fait une fonction pour afficher du texte à l´ecran aussi mais j´avais jamais testé les majuscules :)

elhuron
elhuron
Niveau 6
29 décembre 2006 à 01:34:42

Merci beaucoup pour cette information KeepSmile :)

Pour la SDL, il me manque le nom de la touche ShiftGauche ainsi que Effacer.
J´ai beau fouiller dans les fichiers de SDL (keysym.h), je trouve pas mon bonheur.

J´ai meme noté chaque touche enfoncée, j´ai obtenu tantot des nombres enormes (-75606, 65600...) que des nombres corrects 97, 122 (a, z).
Mais j´ai pas reussi a recuperer les bons :(

Apres avoir quitter le programme, les icones de mes fichiers textes se sont transformés en icone de projet pour code Blocks.

godrik
godrik
Niveau 30
29 décembre 2006 à 12:43:18

ElHuron, le comportement que tu obtiens est normal. Il est probablement que les bits de poids fort soit utilisé pour les touche spéciales.

Parcontre, n´utilise pas directement le code que tu recois par SDL car il est susceptible de changer dans de futur version. La ´norme´ SDL garanti que la touche A sera toujours SDL_A (ou je sais pas quoi) mais ne garanti pas que ca sera toujours le chiffre 64 (ou je sais pas quoi).

elhuron
elhuron
Niveau 6
29 décembre 2006 à 13:48:51

C´est exact, je vais donc apporter une petite modification, j´avait pas pensé a ca.
Merci pour cette info.

Je fais parcourir ma boucle de 97 a 122 pour les lettres, je vais aller de SDLK_a a SDLK_a+26.

Mais sinon, j´affiche le nombre pour retrouver sa constante dans le fichier keysym.h.

Si quelqu´un connait le nom des deux touches que je recherche, merci de me le signaler :)
Pour l´instant, j´ai mit la fleche du haut pour la majuscule (rester enfoncé) et la fleche gauche pour effacer.
Mais le problemes de ces lettres, c´est qu´elles ne sont pas innees, on est pas habituer a les utiliser de cette maniere.

Fvirtman
Fvirtman
Niveau 10
29 décembre 2006 à 14:57:45

ElHuron >
voici un petit code a compiler en mode console (il faut que tu aies la console derriere) :

http://rafb.net/p/uYFTaA77.html

ça te donnera le code de toutes les touches sur lesquelles tu appuieras, en décimal, et hexadécimal.
Pour retrouver la constante dans keysm, recherche le nombre hexa dedans :)

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