yugiohjcj
Messages postés26Date d'inscriptionsamedi 3 juillet 2004StatutMembreDernière intervention18 août 2004
-
10 août 2004 à 02:20
yugiohjcj
Messages postés26Date d'inscriptionsamedi 3 juillet 2004StatutMembreDernière intervention18 août 2004
-
11 août 2004 à 21:43
Bonjour,
voici la source de mon programme:
#include <stdio.h>
#include <stdlib.h>
#include <SDL\SDL.h>
#define true 1
int main(int argc, char *argv[])
{
printf("\a");
if ( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 ) { //Initialisation de SDL
fprintf(stderr, "\aImpossible d'initialiser SDL: %s\n", SDL_GetError());
exit(1);
}
atexit(SDL_Quit);
SDL_EnableUNICODE(1); //Activer l'unicode
SDL_Surface *screen; //Chargement du mode vid'o
while(true){
screen = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);
if ( screen == NULL ) {
fprintf(stderr, "\aImpossible de passer en 640x480 en 16 bpp: %s\n", SDL_GetError());
exit(1);
}
SDL_Event event;
SDL_WaitEvent(&event);
switch (event.type) {
case SDL_KEYDOWN:
printf("La touche %s a été préssée!\n", SDL_GetKeyName(event.key.keysym.sym));
break;
case SDL_QUIT:
exit(0);
}
}
return(0);
}//Fin de la boucle main()
Et la fonction printf(""); n'affiche aucun texte. Par exemple, l'instruction printf("\a"); au début du programme ne fait pas sonner le haut parleur de ma tour. Aussi printf("La touche %s a été préssée!\n", SDL_GetKeyName(event.key.keysym.sym)); il n'y a aucun texte qui s'affiche quand je tape une touche...
Pour compiler j'utilise minGW avec la commande:
gcc -o xcom.exe xcom.c -lmingw32 -lSDLmain -lSDL -mwindows
Peut-être ça vient de ça?
Aidez-moi c'est complètement chelou comme problème...
/*Acheter, Vendre, Echanger des cartes Yu-Gi-Oh! Jeu de Cartes à Jouer sur yugiohjcj.free.fr*/
Funto66
Messages postés1267Date d'inscriptionmercredi 1 janvier 2003StatutMembreDernière intervention28 février 20074 10 août 2004 à 12:27
Nan, en fait SDL redirige automatiquement les flux stdout, stdin et stderr vers des fichiers stdout.txt...etc.
Si tu veux éviter ça, tu peux faire ça (du moins, sous Visual C++ ça marche) :
freopen("CON", "w", stdout);
freopen("CON", "r", stdin);
freopen("CON", "w", stderr);
au début de ton main().
D'ailleurs, si quelqu'un pouvait m'affirmer que ça marche aussi sous Dev-C++ je liu serais reconnaissant ^^
Patience et longueur de temps font plus que force
ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/
Funto66
Messages postés1267Date d'inscriptionmercredi 1 janvier 2003StatutMembreDernière intervention28 février 20074 11 août 2004 à 03:06
Le fichier stdout.txt se trouve dans le dossier où s'exécute ton exécutable, c'est à dire dans le même dossier que l'exécutable si tu double-cliques dessus depuis l'explorateur par exemple ^^
Mets un printf ou un cout et tu le verras ton fichier ;)
Patience et longueur de temps font plus que force
ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/
yugiohjcj
Messages postés26Date d'inscriptionsamedi 3 juillet 2004StatutMembreDernière intervention18 août 2004 11 août 2004 à 03:33
Ah ouais exact.
C'est étonnant ça...Je croyais que SDL ne toucherai pas à l'action d'une commandes tel que printf("");
Merci. Et peut-on choisir quel sera le nom du fichier? Parce que je ne voudrai pas qu'il porte le nom de stdout.txt. Et encore mieux, peut-on rediriger les informations de printf(""); autre par que dans un fichier?
/*Acheter, Vendre, Echanger des cartes Yu-Gi-Oh! Jeu de Cartes à Jouer sur yugiohjcj.free.fr*/
Funto66
Messages postés1267Date d'inscriptionmercredi 1 janvier 2003StatutMembreDernière intervention28 février 20074 11 août 2004 à 19:43
Ben ouais c'est ce que je disais plus haut; faut utiliser la fonction freopen().
En fait, au niveau du C, la console est considérée comme un fichier, ou disons plutôt qu'elle est considérée comme un flux. Les fichiers sont aussi des flux. C'est pour cela qu'on peut utiliser printf() pour écrire sur la console ou pour écrire sur fichier, car printf est l'équivalent d'un sprintf(stdout, "Ton texte");
stdout est un fichier qui correspond par défaut à la console, comme stdin (pour les scanf() par exemple) ou stderr (pour les erreurs).
Mais avec la fonction freopen() tu peux reouvrir un flux existant vers un
autre fichier (ou vers la console); pour que printf() écrive sur le fichier "printf.txt" par exemple, il faudra que tu mettes au début de ton main() :
reopen("printf.txt", "w", stdout);
La valeur spéciale "CON" pour le 1er paramètre (du moins sous Visual C++) correspond à la console.
Voili voilou :)
Patience et longueur de temps font plus que force
ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/