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

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

9 réponses

Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
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/
3
pinderlot Messages postés 59 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 1 septembre 2004 2
10 août 2004 à 09:37
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 !
0
cs_imanewin32 Messages postés 71 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 12 août 2004
10 août 2004 à 10:03
assure toi que "\a" ne corespond pas à un caractère spécial du genre \r ou \n.
essaye printf avec une autre chaine
0
cs_imanewin32 Messages postés 71 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 12 août 2004
10 août 2004 à 10:05
oui c'est ça \a est une sonette!!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yugiohjcj Messages postés 26 Date d'inscription samedi 3 juillet 2004 Statut Membre Dernière intervention 18 août 2004
10 août 2004 à 18:49
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*/
0
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
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/
0
yugiohjcj Messages postés 26 Date d'inscription samedi 3 juillet 2004 Statut Membre Dernière intervention 18 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*/
0
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
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/
0
yugiohjcj Messages postés 26 Date d'inscription samedi 3 juillet 2004 Statut Membre Dernière intervention 18 août 2004
11 août 2004 à 21:43
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*/
0