Correction de mon programme
Fermé
Utilisateur anonyme
-
11 févr. 2016 à 18:02
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 - 4 août 2016 à 19:59
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 - 4 août 2016 à 19:59
A voir également:
- Correction de mon programme
- Programme demarrage windows 10 - Guide
- Correction orthographe - Guide
- Telecharger clavier français avec correction - Télécharger - Divers Utilitaires
- Désinstaller programme windows 10 - Guide
- Mode correction word - Guide
5 réponses
forum92
Messages postés
220
Date d'inscription
lundi 6 juillet 2015
Statut
Membre
Dernière intervention
14 août 2018
133
1 août 2016 à 17:47
1 août 2016 à 17:47
premierement:
#include "fonction.h"
je mettrais #include <fonction.h>
deuxiemement pourquoi dans ton main tu demande un int argc si tu l'utilise pas?
#include "fonction.h"
je mettrais #include <fonction.h>
deuxiemement pourquoi dans ton main tu demande un int argc si tu l'utilise pas?
paly2
Messages postés
254
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
15 février 2018
25
Modifié par paly2 le 2/08/2016 à 21:15
Modifié par paly2 le 2/08/2016 à 21:15
Salut, c'est un peu tard pour répondre à ce sujet qui commence à se faire vieux,
Je vois quelques problèmes dans ton code.
1. Tu utilises ici la SDL 1. Elle est maintenant bien dépassée, la SDL 2.0 est sortie. L'API n'est plus compatible (ils ont bien fait de la changer, d'ailleurs la nouvelle est bien meilleure, je trouve), aussi si tu lisais un tutoriel pour la SDL 1, tu ne pourras plus le réutiliser pour la SDL 2 (mais elle est plus simple à utiliser).
2. Tu fais appel deux fois à SDL_SetVideoMode (une fonction disparue dans la SDL 2, remplacée par la super-élégante SDL_CreateWindow), ne conserve que la deuxième (dont tu récupères le retour, ce qui est assez indispensable).
3. J'imagine que la fonction pause() est déclarée dans fonctions.h et définie quelque part dans un fichier source. Si ce n'est pas le cas, ça doit l'être.
4.
Documentation: If dstrect is NULL, then the destination position (upper left corner) is (0, 0).
Donc tu peux oublier la variable pbackground (qui est bien encombrante, n'est-ce pas ?), et écrire simplement:
5. Vérifie toujours les retours des fonctions, il peut s'être produit une erreur et seul le retour te le dira ! Ils sont décrits dans la documentation.
6. N'oublie pas de faire des SDL_FreeSurface pour toutes les surfaces que tu alloues, ainsi qu'un SDL_Quit à la fin.
7.
5 point-virgules oubliés :p
8.
En fullscreen ? J'espère que ta fonction pause() prévoit un moyen pour arrêter le programme avec un autre événement que SDL_QUIT, qui généralement ne peut être produit que par un clic sur la croix qui disparaît en fullscreen !
De toute façon, tu ré-appelles cette fonction après (tu dois donc supprimer ce premier appel) sans SDL_FULLSCREEN, voir 1.
Je te laisse déjà corriger tout ça !
Et sinon, il est indispensable que tu nous donnes les messages d'erreur dont il est question. Il ne sert absolument à rien de nous dire qu'il y a une erreur sans nous dire quelle erreur, nous ne pourrons pas t'aider. Il peut y avoir des milliers de causes à "une erreur qui se produit quand", quand une seule cause est possible pour "cette erreur".
A+
La curiosité est une excellente qualité !
Je vois quelques problèmes dans ton code.
1. Tu utilises ici la SDL 1. Elle est maintenant bien dépassée, la SDL 2.0 est sortie. L'API n'est plus compatible (ils ont bien fait de la changer, d'ailleurs la nouvelle est bien meilleure, je trouve), aussi si tu lisais un tutoriel pour la SDL 1, tu ne pourras plus le réutiliser pour la SDL 2 (mais elle est plus simple à utiliser).
2. Tu fais appel deux fois à SDL_SetVideoMode (une fonction disparue dans la SDL 2, remplacée par la super-élégante SDL_CreateWindow), ne conserve que la deuxième (dont tu récupères le retour, ce qui est assez indispensable).
3. J'imagine que la fonction pause() est déclarée dans fonctions.h et définie quelque part dans un fichier source. Si ce n'est pas le cas, ça doit l'être.
4.
pbackground.x = 0; pbackground.y = 0; // ... SDL_BlitSurface(background, NULL , ecran, &pbackground);
Documentation: If dstrect is NULL, then the destination position (upper left corner) is (0, 0).
Donc tu peux oublier la variable pbackground (qui est bien encombrante, n'est-ce pas ?), et écrire simplement:
SDL_BlitSurface(background, NULL , ecran, NULL);
5. Vérifie toujours les retours des fonctions, il peut s'être produit une erreur et seul le retour te le dira ! Ils sont décrits dans la documentation.
6. N'oublie pas de faire des SDL_FreeSurface pour toutes les surfaces que tu alloues, ainsi qu'un SDL_Quit à la fin.
7.
background = SDL_LoadBMP("background.bmp") SDL_BlitSurface(background, NULL , ecran, &pbackground) avion = SDL_LoadBMP("avion.bmp") SDL_BlitSurface(avion, NULL , ecran, &pavion) SDL_Flip(ecran)
5 point-virgules oubliés :p
8.
SDL_SetVideoMode(500,665,32, SDL_HWSURFACE | SDL_FULLSCREEN );
En fullscreen ? J'espère que ta fonction pause() prévoit un moyen pour arrêter le programme avec un autre événement que SDL_QUIT, qui généralement ne peut être produit que par un clic sur la croix qui disparaît en fullscreen !
De toute façon, tu ré-appelles cette fonction après (tu dois donc supprimer ce premier appel) sans SDL_FULLSCREEN, voir 1.
Je te laisse déjà corriger tout ça !
Et sinon, il est indispensable que tu nous donnes les messages d'erreur dont il est question. Il ne sert absolument à rien de nous dire qu'il y a une erreur sans nous dire quelle erreur, nous ne pourrons pas t'aider. Il peut y avoir des milliers de causes à "une erreur qui se produit quand", quand une seule cause est possible pour "cette erreur".
A+
La curiosité est une excellente qualité !
forum92
Messages postés
220
Date d'inscription
lundi 6 juillet 2015
Statut
Membre
Dernière intervention
14 août 2018
133
2 août 2016 à 22:06
2 août 2016 à 22:06
Ok désolé je savais pas...
D habitude je mets les entête des sous programmes devant le main. Je les intègres pas avec un .h.
C'est quoi l'intérêt d'appeler quelque chose si tu l'utilises pas ?
D habitude je mets les entête des sous programmes devant le main. Je les intègres pas avec un .h.
C'est quoi l'intérêt d'appeler quelque chose si tu l'utilises pas ?
paly2
Messages postés
254
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
15 février 2018
25
Modifié par paly2 le 3/08/2016 à 11:00
Modifié par paly2 le 3/08/2016 à 11:00
D habitude je mets les entête des sous programmes devant le main. Je les intègres pas avec un .h.
"Sous-programmes" ? Tu veux dire fonctions ?
C'est seulement dans les très petits programmes qui ne sont constitués que d'un seul fichier source qu'on déclare les prototypes des fonctions dans ce fichier source.
C'est quoi l'intérêt d'appeler quelque chose si tu l'utilises pas ?
Généralement le programme se met très rapidement (dès qu'il commence à évoluer et à se complexifier) à utiliser ses arguments, pour permettre à l'utilisateur plus de flexibilité. Et sinon c'est juste une question d'habitude :-)
De plus, certains éditeurs mettent automatiquement les arguments de la fonction main.
Mais main() est la seule exception parce que ses arguments sont définis dans les standards (C89, C99...) ; pour les autres fonctions il est vrai qu'il est parfaitement inutile (et même très mal) de demander des paramètres inutilisés.
"Sous-programmes" ? Tu veux dire fonctions ?
C'est seulement dans les très petits programmes qui ne sont constitués que d'un seul fichier source qu'on déclare les prototypes des fonctions dans ce fichier source.
C'est quoi l'intérêt d'appeler quelque chose si tu l'utilises pas ?
Généralement le programme se met très rapidement (dès qu'il commence à évoluer et à se complexifier) à utiliser ses arguments, pour permettre à l'utilisateur plus de flexibilité. Et sinon c'est juste une question d'habitude :-)
De plus, certains éditeurs mettent automatiquement les arguments de la fonction main.
Mais main() est la seule exception parce que ses arguments sont définis dans les standards (C89, C99...) ; pour les autres fonctions il est vrai qu'il est parfaitement inutile (et même très mal) de demander des paramètres inutilisés.
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
>
paly2
Messages postés
254
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
15 février 2018
4 août 2016 à 19:59
4 août 2016 à 19:59
"Sous-programmes" est l'appellation de plus en plus désuète des fonctions. Popularisée quand les langages utilisant le terme dans leur syntaxe (entre autres les dérivés de BASIC, avec
Sub), plus aucun langage récent ou digne de ce nom (C par exemple) ne s'en sert.
forum92
Messages postés
220
Date d'inscription
lundi 6 juillet 2015
Statut
Membre
Dernière intervention
14 août 2018
133
3 août 2016 à 12:32
3 août 2016 à 12:32
ok merci!
on en apprend tout les jours !:)
--
on en apprend tout les jours !:)
--
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mehdi178
Messages postés
27
Date d'inscription
mardi 26 août 2014
Statut
Membre
Dernière intervention
9 juillet 2017
1
4 août 2016 à 18:42
4 août 2016 à 18:42
Des réponses aussi tardives. Désolé de vous avoir fais perdre du temps mais j'ai arrêté le C pour passer au Java qui me paraît plus simple et plus utile. Mais merci quand même pour avoir l'intention de m'aider lol.
paly2
Messages postés
254
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
15 février 2018
25
4 août 2016 à 19:35
4 août 2016 à 19:35
Ton programme aurait été moins compliqué s'il utilisait l'API de la SDL 2.
S'il est vrai que les programmes Java prennent souvent moins de lignes que des programmes équivalents en C, le Java n'est pas plus utile que le C, il permet même de faire moins de choses (par exemple, il est impossible d'écrire un système d'exploitation en Java). De plus le Java a une vitesse d'exécution plus faible, et il consomme de bien plus grandes quantités de mémoire. Perso ce n'est pas un langage que je conseillerais.
Et de rien...
S'il est vrai que les programmes Java prennent souvent moins de lignes que des programmes équivalents en C, le Java n'est pas plus utile que le C, il permet même de faire moins de choses (par exemple, il est impossible d'écrire un système d'exploitation en Java). De plus le Java a une vitesse d'exécution plus faible, et il consomme de bien plus grandes quantités de mémoire. Perso ce n'est pas un langage que je conseillerais.
Et de rien...
2 août 2016 à 20:04
je mettrais #include <fonction.h>
Non, c'est probablement bien "fonction.h", car ce headers ne fait pas partie de la bibliothèque standard (et probablement pas d'une autre bibliothèque non plus, avec un nom français et très vague). On suppose donc qu'il s'agit d'un fichier du programme, ce qui nécessite l'utilisation de guillemets et non de chevrons.
deuxiemement pourquoi dans ton main tu demande un int argc si tu l'utilise pas?
On demande fréquemment les arguments du programme même si on ne les utilise pas. C'est tout à fait correct. Il est vrai qu'ici fonctionnerait aussi bien.