SDL: La commande printf(""); n'affche rien!

Signaler
Messages postés
26
Date d'inscription
samedi 3 juillet 2004
Statut
Membre
Dernière intervention
18 août 2004
-
Messages postés
26
Date d'inscription
samedi 3 juillet 2004
Statut
Membre
Dernière intervention
18 août 2004
-
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*/

9 réponses

Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
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/
Messages postés
59
Date d'inscription
jeudi 1 juillet 2004
Statut
Membre
Dernière intervention
1 septembre 2004

t'as pensé à vider le tampon en entrée ?

essaye une fonction du type fflush(stdin);

idem en sortie...

-----------------------------------------------
Tout ce qui ne tue pas rend plus fort !
Messages postés
71
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
12 août 2004

assure toi que "\a" ne corespond pas à un caractère spécial du genre \r ou \n.
essaye printf avec une autre chaine
Messages postés
71
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
12 août 2004

oui c'est ça \a est une sonette!!!!
Messages postés
26
Date d'inscription
samedi 3 juillet 2004
Statut
Membre
Dernière intervention
18 août 2004

OK. Je vais essayer ces solutions.
Et le fichier stdout.txt, il se trouve dans le dossier ou est enregistré le fichier executable ?

/*Acheter, Vendre, Echanger des cartes Yu-Gi-Oh! Jeu de Cartes à Jouer sur yugiohjcj.free.fr*/
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
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/
Messages postés
26
Date d'inscription
samedi 3 juillet 2004
Statut
Membre
Dernière intervention
18 août 2004

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*/
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
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/
Messages postés
26
Date d'inscription
samedi 3 juillet 2004
Statut
Membre
Dernière intervention
18 août 2004

Ah super explication.
Là j'ai tous les renseignements.
Merci beaucoup. ;-)

/*Acheter, Vendre, Echanger des cartes Yu-Gi-Oh! Jeu de Cartes à Jouer sur yugiohjcj.free.fr*/