[C] pouvez vs trouver les erreurs ds mon prog svp

Fermé
adi - 12 mai 2005 à 16:47
sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 - 13 mai 2005 à 14:22
bonjour voila mon prog a kelke souci k g ne trouve pas elasss pourier vs maider à les trouvers car je me tappe la tete contre les murs la merci!! d'avance

// definition des librairies
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

// 4.1 les structures de données
// définition des nouveaux types
typedef unsigned char byte; // pour un caractère
typedef unsigned short int word; // pour un mot de 2 octets
typedef unsigned long int dword; // pour un mot de 4 octets


// définitions des structures

// strucutre en-tete de fichier :
typedef struct
{
byte signature[2];
dword taille_du_fichier, champs_inconnu, offset_image, version;
}BMP_Header;

// structure en-tete de l'image version 4
typedef struct
{
word nbre_plan, bit_pixel;
dword L_image, H_image, compression, taille_image, resol_horiz, resol_vert, nbr_couleur, nbr_couleur_import;
}BitMapHeaderVersion4;


//déclaration des sous programmes
int LitHeader (BMP_Header *enreg);

//4.2 Lecture de l'en-tete de fichier
int LitHeader (BMP_Header *enreg)
{
char signature[2];
int taille_du_fichier;
int champs_inconnu;
int offset_image;
int version;
int i;

fread(&signature,1,2,IN); // lecture du type de l'image
for(i=0;i<2;i++){
enreg->signature[i]=signature[i];
}

fread(&taille_du_fichier,4,1,IN); // lecture de la taille de l'image
enreg->taille_du_fichier=taille_du_fichier;

fread(&champs_inconnu,4,1,IN); // lecture du champs inconuu
enreg->champs_inconnu=champs_inconnu;

fread(&offset_image,4,1,IN); // lecture de l'offset
enreg->offset_image=offset_image;

fread(&version,4,1,IN); // lecture de la version de l'image Bmp
enreg->version=version;

printf(" signature: %c%c \n taille_du_fichier: %d \n champs_inconnu: %d \n offset_de_l'image: %d \n"
,enreg->signature[0],enreg->signature[1],enreg->taille_du_fichier,enreg->champs_inconnu,enreg->offset_image);

if(strncmp(signature,"BM",2)) //si l'image corespond a un point Bmp on retourne 1 sinon 0
{
return 1;
}
else
{
return 0;
}
} //fin de la lecture du fichier d'en-tete
FILE *IN;
//programme principal

int main(void)
{

int *enreg;
char *nom_fichier;


//ouverture du fichier
strcpy (nom_fichier,"ROCKET.bmp");
if ((IN = fopen (nom_fichier,"rb"))==NULL){
printf("ERREUR d'ouverture du fichier %s\n",nom_fichier);
exit(-1);
}

LitHeader();

if (return = 0)
{
printf("ce n'est pas une image de type Bmp \n");
system("pause");
}
else
{
printf("c'est une image de type Bmp \n");
}


getchar();
}
A voir également:

10 réponses

m0n0-le-14r3 Messages postés 174 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 25 octobre 2005 17
12 mai 2005 à 16:47
c quoi exactement lez probleme??
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
12 mai 2005 à 16:50
oui
0
ouai g essayer votre technik ca marche pas...lol
a++
0
a lon aviis c un probleme de declaration de sous programme et g pense kil y a aussi un prob a l'appel mais g ne voi pas commen le regler enfin jy arriv pas koi
0
m0n0-le-14r3 Messages postés 174 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 25 octobre 2005 17
12 mai 2005 à 16:52
nbon la question est :
" Qu'est ce que le compilateur te met comme message d'erreur?? "
;)
0

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

Posez votre question
je n'ai pas tout suivi mais en regardant juste cette ligne, elle ne correspond pas au commentaire :

if(strncmp(signature,"BM",2)) //si l'image corespond a un point Bmp on retourne 1 sinon 0

c'est faux,
il manque le ! (la fonction strncmp retourne 0 si ok, donc on passe dans le "else" si on ne met pas le !) :
if(!strncmp(signature,"BM",2))
0
aussi :
remplacer
if (return = 0)
par
if (return == 0)
sinon, le résultat est toujours 0.
= assignation
== comparaison

c'est le jeu des 7 erreurs ?
0
du coup, je dis n'importe quoi, désollé.
faire :

int ret = 0;

ret = LitHeader();

if (ret == 0)
0
TLa Messages postés 57 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 14 février 2009 12
13 mai 2005 à 14:14
1)
char *nom_fichier;
//ouverture du fichier
strcpy (nom_fichier,"ROCKET.bmp"); 


nom_fichier pointe sur on sait pas quoi -> jardinage mémoire

faire :
 //ouverture du fichier
if ((IN = fopen ("ROCKET.bmp","rb"))==NULL){
...
0
elle est pas mal non plus celle là
0
sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 144
13 mai 2005 à 14:22
Puisqu'on ne connais pas sous quel C tu programme, les INTs ne sont pas forcement des DWORD,
donc le fait de fair des fread avec une taille de 4 avec des variables int, est à vérifier!
utilise les sizeof() en cas de doute, et des variables "dword" à l'interieur du programme, en adaptant la definition des dword selon ton environnement C
0