Les fichiers en (c)

Résolu/Fermé
braveheart19.28 - 17 déc. 2010 à 23:02
breaveheart19_28 Messages postés 6 Date d'inscription vendredi 17 décembre 2010 Statut Membre Dernière intervention 19 décembre 2010 - 19 déc. 2010 à 21:56
Bonjour, je suis debutante en programmation
j'ai ecrit un programme recement
il n'y a pas d'erreurs mais je ne sais pas pourquoi je ne peut ecrire dans mon fichier
l'énnoncé de l'exercice
soit un fichier binaire contenant les mesures de températures effectuées sur différentes villes à différentes dates.chaque enregistrement à la forme suivante<ville date temperature>
donner un programme en c qui permet de:
connaitre la temperature minimale.maximale et moyenne pour une ville donnée
rajouter un nouveau enregistrement
modifier la temperature d'une ville donnée à une date donnée
supprimer ts les enreg relatifs à une ville donnée
le voici mon programme

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct temp_ville
{
char ville [50];
int date [100];
int temp [100];
int pos ;/* la derniere position occupée*/

};
struct bloc
{
struct temp_ville val;
struct bloc *suiv;
};
struct maillon
{
int num;
struct maillon *suivant ;
};
typedef struct bloc bloc;
typedef struct maillon maillon;

int main()
{
/******** le programme que j'ai ecrit et long car il y a bcp de vérifications qui se repetent*****/
/***il n'y a pas d'erreurs dans mon programme mais pour une raison ou une autre il n'ecrit pas dans le fichier*****/

bloc *tete=NULL;
bloc *p=NULL ,*k=NULL;
bloc *t=NULL ,*h=NULL,*queue=NULL;
FILE *fichier;
maillon *g=NULL,*tete2=NULL,*queue2=NULL,*l=NULL;
char nomfichier[50];
char tab[50];
char ancienneville[50];

int i,j,a,b,c,min,max,confirme=0,cpt=0,arret=0,trouv=0,supprime=0,moy=0,entree=0;
while(!arret)
{
arret=0;

p=malloc(sizeof(bloc));
p->val.pos=0;
if(p!=NULL)
{

do{
confirme=0;

printf("\n veuillez introduire le nom de la ville svp :") ;
scanf("%s",p->val.ville);
printf("\n voulez-vous modifier le nom de la ville????? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
printf ("\n veuillez introduire la date svp: ");

do{
confirme=0;

printf("\n \t le jour :") ;
scanf("%d",&a);
while((a>31) ||(a<0))
{
printf("\n il y a une erreur \n veuillez introduire le jour une autre fois svp:");
printf("\n le jour : ");
scanf("%d",&a);

};
printf("\n voulez-vous modifier le jour ?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);


do{
confirme=0;

printf("\n \t le mois :") ;
scanf("%d",&b);
while((b>12)||(b<0))
{
printf("\n il y a une erreur \n veuillez introduire le mois une autre fois svp:");
printf("\n le mois : ");
scanf("%d",&b);

};
printf("\n voulez-vous modifier le mois?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);

do{
confirme=0;

printf("\n \t l'annee :") ;
scanf("%d",&c);
while((c<1500)||(c<0))
{
printf("il y a une erreur \n veuillez introduire l'annee une autre fois svp:");
printf("\n l'annee : ");
scanf("%d",&c);

};
printf("\n voulez-vous modifier l'annee?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
c=c+(b*10000)+(a*1000000);
p->val.date[0]=c;
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",p->val.temp[0]);
if(tete==NULL)
{
tete=p;
p->suiv=NULL;
queue=tete;
}

if (tete!=NULL)
{
queue->suiv=p;
p->suiv=NULL;
queue=p;
}
printf("\n voulez-vous inserer une autre fois?(0 pour oui 1 pour non)");
scanf("%d",&arret);
if (!arret)
{
do{
confirme=0;

printf("\n veuillez introduire le nom de la ville svp :") ;
scanf("%s",tab);
printf("\n voulez-vous modifier le nom de la ville????? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
/*****vérifiant si la ville qu'il vient d'inserer existe déja dans l'un des blocs******/

while ((p!=NULL) && (!trouv))
{

if(strcmp(tab,p->val.ville)==0) /*****si elle existe****/
{

if (p->val.pos<99) /*****on vérifie s'il y a de la place pour l'inserer*****/
{
trouv=1; /*pour arreter la recherche*/
p->val.pos++;
printf ("\n veuillez introduire la date svp: ");

do{
confirme=0;

printf("\n \t le jour :") ;
scanf("%d",&a);
while((a>31) ||(a<0))
{
printf("\n il y a une erreur \n veuillez introduire le jour une autre fois svp:");
printf("\n le jour : ");
scanf("%d",&a);

};
printf("\n voulez-vous modifier le jour ?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);


do{
confirme=0;

printf("\n \t le mois :") ;
scanf("%d",&b);
while((b>12)||(b<0))
{
printf("\n il y a une erreur \n veuillez introduire le mois une autre fois svp:");
printf("\n le mois : ");
scanf("%d",&b);

};
printf("\n voulez-vous modifier le mois?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);

do{
confirme=0;

printf("\n \t l'annee :") ;
scanf("%d",&c);

while((c<1500)||(c<0))
{
printf("il y a une erreur \n veuillez introduire l'annee une autre fois svp:");
printf("\n l'annee : ");
scanf("%d",&c);

};
printf("\n voulez-vous modifier l'annee?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);

}while(!confirme);
c=c+(b*10000)+(a*1000000);
p->val.date[p->val.pos]=c;
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",p->val.temp[p->val.pos]);
}
else
p=p->suiv;/****dans le cas où il y a ++ blocs qui contiennent les enregisterement de la meme ville******/
}
else
p=p->suiv;
};

}
}
}/********si la ville n'a pas été inserée avant où dans le cas où tt les
blocs de cette ville été pleins,on reboucle et on crée un nouveau bloc
en faisant le chainage(au niveau de la queue)************/


/***************ecriture dans le fichier**************/
printf("entrer le nom du fichier svp : ");
scanf("%s",nomfichier);
fichier=fopen(nomfichier,"wb");
if (fichier!=NULL)
{


fprintf(fichier,"\n\t **** les temperatures des villes inserées *****");
p=tete;

while(p!=NULL)
{


fprintf(fichier,"\n________________________________________________________________");
fprintf(fichier,"\n| ville : | %s |",p->val.ville);
fprintf(fichier,"\n|__________|____________________________________________________|");
for(i=0;i<=p->val.pos;i++)
{ /*supposons qu'on a 12122010 ***/
c=(p->val.date[i]/1000000); /*on obtient le jour 12*/
a=(p->val.date[i]%1000000);
fprintf(fichier,"\n|date :| %d / ",c);/****|date :| 12/ *****/
c=(a/10000);
fprintf(fichier," %d / ",c); /***| date :|12/12/ **********/
c=(a/10000);
fprintf(fichier," %d / ",c); /*** |date :| 12/12/2010 |*******/
a=a%10000;
fprintf(fichier," %d | ",a);
fprintf(fichier,"temperature: | %d",p->val.temp[i]);
fprintf( fichier,"\n| ____________________________________________________________________|");
}
p=p->suiv;
};

}
fclose(fichier);

/****************************supprission d'une ville*****************************************/

while(!supprime)
{
printf("voulez-vous supprimer tous les enregistrements d'une ville?(tapez 0 pour oui 1 pour non) ");
scanf("%d",&supprime);
if (supprime==0)
{
printf("donnez le nom de la ville a supprimer");
scanf("%s",tab);
p=tete;
while(p!=NULL)
{
if (strcmp(p->val.ville,tab)==0)

{ t=p->suiv;
free(p);
h->suiv=t;
}
h=p;
p=p->suiv;

}
}

};
/*********************ajouter un enregistrement***************/
arret=0;
while (!arret)
{
printf("voulez-vous ajouter un enregistrement?? tapez 0 pour oui 1 pour non");
scanf ("%d",arret);
if (!arret)
{
do{
confirme=0;

printf("\n veuillez introduire le nom de la ville svp :") ;
scanf("%s",tab);
printf("\n voulez-vous modifier le nom de la ville????? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);

while ((p!=NULL) && (!trouv))
{
strcpy(ancienneville,p->val.ville);
if(!strcmp(tab,ancienneville))
{

if (p->val.pos<99)
{
trouv=1;
p->val.pos++;
printf ("\n veuillez introduire la date svp: ");

do{
confirme=0;

printf("\n \t le jour :") ;
scanf("%d",&a);
while((a>31) ||(a<0))
{
printf("\n il y a une erreur \n veuillez introduire le jour une autre fois svp:");
printf("\n le jour : ");
scanf("%d",&a);

};
printf("\n voulez-vous modifier le jour ?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);


do{
confirme=0;

printf("\n \t le mois :") ;
scanf("%d",&b);
while((b>12)||(b<0))
{
printf("\n il y a une erreur \n veuillez introduire le mois une autre fois svp:");
printf("\n le mois : ");
scanf("%d",&b);

};
printf("\n voulez-vous modifier le mois?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);

do{
confirme=0;

printf("\n \t l'annee :") ;
scanf("%d",&c);

while((c<1500)||(c<0))
{
printf("il y a une erreur \n veuillez introduire l'annee une autre fois svp:");
printf("\n l'annee : ");
scanf("%d",&c);

};
printf("\n voulez-vous modifier l'annee?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);

}while(!confirme);
c=c+(b*10000)+(a*1000000);
p->val.date[p->val.pos]=c;
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",p->val.temp[p->val.pos]);
}
else
p=p->suiv;
}
else
p=p->suiv;
};
if (!trouv) /********* s'il la ville n'existe pas*******/
{

k=malloc(sizeof(bloc)); /*** on crée un nouveau bloc*****/
k->val.pos=0;
strcpy(k->val.ville,tab); /*** on copie la nouvelle ville dans le champs ville du bloc****/ queue->suiv=k; /*** on fait le chainage *****/
k->suiv=NULL;
queue=k;/** on modifie la queue ****/

printf ("\n veuillez introduire la date svp: ");

do{
confirme=0;

printf("\n \t le jour :") ;
scanf("%d",&a);
while((a>31) ||(a<0))
{
printf("\n il y a une erreur \n veuillez introduire le jour une autre fois svp:");
printf("\n le jour : ");
scanf("%d",&a);

};
printf("\n voulez-vous modifier le jour ?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);


do{
confirme=0;

printf("\n \t le mois :") ;
scanf("%d",&b);
while((b>12)||(b<0))
{
printf("\n il y a une erreur \n veuillez introduire le mois une autre fois svp:");
printf("\n le mois : ");
scanf("%d",&b);

};
printf("\n voulez-vous modifier le mois?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);

do{
confirme=0;
printf("\n \t l'annee :") ;
scanf("%d",&c);

while((c<1500)||(c<0))
{
printf("il y a une erreur \n veuillez introduire l'annee une autre fois svp:");
printf("\n l'annee : ");
scanf("%d",&c);
};
printf("\n voulez-vous modifier l'annee?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
c=c+(b*10000)+(a*1000000);/***on concatene la date****/
p->val.date[0]=c; /** pour bien manipuler les dates et les verification chaque fois*****/
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",p->val.temp[0]);
}
}
};
/*************modifier la temperature d'une ville donnée à une date donnée**************/
arret=0;
while(!arret)
{
printf("voulez-vous modifier la temperature d'une ville?????(0 oui 1 non)");
scanf("%d",&arret);
if (!arret)
{
printf("introduisez le nom de la ville svp");
scanf("%s",tab);
printf ("\n veuillez introduire la date svp: ");

do{
confirme=0;

printf("\n \t le jour :") ;
scanf("%d",&a);
while((a>31) ||(a<0))
{
printf("\n il y a une erreur \n veuillez introduire le jour une autre fois svp:");
printf("\n le jour : ");
scanf("%d",&a);
};
printf("\n voulez-vous modifier le jour ?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
do{
confirme=0;

printf("\n \t le mois :") ;
scanf("%d",&b);
while((b>12)||(b<0))
{
printf("\n il y a une erreur \n veuillez introduire le mois une autre fois svp:");
printf("\n le mois : ");
scanf("%d",&b);

};
printf("\n voulez-vous modifier le mois?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);

do{
confirme=0;

printf("\n \t l'annee :") ;
scanf("%d",&c);

while((c<1500)||(c<0))
{
printf("il y a une erreur \n veuillez introduire l'annee une autre fois svp:");
printf("\n l'annee : ");
scanf("%d",&c);

};
printf("\n voulez-vous modifier l'annee?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);

}while(!confirme);
c=c+(b*10000)+(a*1000000);
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",&j);
p=tete;
trouv=0;
while ((p!=NULL)&&(!trouv))/****on cherche la ville et la date****/
{
if(strcmp(p->val.ville,tab)==0)
{
for (i=0;i<=p->val.pos;i++)
{
if(p->val.date[i]==c) /**** on compare les dates du blocs jusqu'à pos****/
{

p->val.temp[i]=j;/***** s'il ya egalité on ecrase l'ancienne temp****/
trouv=1; /*** la ville et la date que l'utilisateur a données existent***/
}
}
}else
p=p->suiv;/*** on cherche dans les autres blocs si la ville occupe plusieurs plocs****/
}
if (!trouv)
printf("la ville ou la date que vous avez demandées n'existent pas dans le fichier");
}
}
/*************affichage de la valeur min et max et la moyenne des temperatures d'une ville *****************/
arret=0;
while(!arret)
{
printf("inserez le nom de la ville que vous voulez afficher sa temp min et max et sa temperature moyenne");
scanf("%s",tab);
p=tete;
trouv=0;
while (p!=NULL)
{
if(strcmp(p->val.ville,tab)==0)
{
trouv=1;
entree=1;
for (i=0;i<= p->val.pos;i++)
{
if(min > p->val.temp[i])
min=p->val.temp[i];
if (max< p->val.temp[i])
max=p->val.temp[i];
moy=moy+p->val.temp[i];
cpt++;

}
p=p->suiv;
/**dans le cas où il y a ++ blocs qui concernent la meme ville
on a besoin de sauvegarder le min et le max de chaque bloc de cette ville
pour faire ce la on sauvegarde chaque fois le min et le max du bloc courant dans 2 maillons
on garde le chainage aprés on compare toutes les valeurs de cette liste et on trouv le mmin et le max****/
if (entree) /**si on s'est rentré dans la boucle pour =>on a besoin de sauvegarder les nouvelles valeurs qu'on a trouvé****/
{
entree=0;/***pour eviter de sauvegarder apres chaque execution de la boucle tq****/
l=malloc(sizeof(maillon));
l->num=min;
g=malloc(sizeof(maillon));
g->num=max;
if(tete2==NULL)
{tete2=l;
l->suivant=g;
queue2=g;
g->suivant=NULL;
}
else
{
queue2->suivant=l;
l->suivant=g;
queue2=g;
g->suivant=NULL;
}
}
}
};

if (trouv)
{
moy=moy/cpt;
l=tete2;
min=l->num;
max=l->suivant->num;
while (l!=NULL) /*** on cherche dans la list les valeurs min et max ****/
{
if (min>l->num)
min=l->num;
if(max<l->num)
max=l->num;
l=l->suivant;
}
printf("\n la temperature min est : %d",min);
printf("\n la temperature max est : %d",max);
printf("\n la temperature moyenne est : %d",moy);
}
else
printf("\nla ville que vous-avez demandé n'existe pas");

printf("\nvoulez-vous afficher les temp min max et moy d'une autre ville????(0 oui 1 non)");
scanf("%d",&arret);
}
}




A voir également:

6 réponses

Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
18 déc. 2010 à 02:12
Bonsoir,
c'est un projet tout entier que tu nous demande d'analyser, et il y a peu de chances que tu trouves, sur ce forum ou un autre, quelqu'un qui prenne le temps de le faire.
Commence par essayer d'isoler le problème. Tu dis être débutante en programmation, il faut apprendre également à chasser les bugs, ça fait partie du métier ;)
0
K-Jah94 Messages postés 4 Date d'inscription mardi 30 novembre 2010 Statut Membre Dernière intervention 18 décembre 2010
18 déc. 2010 à 02:37
Télécharge Linux, si tu utilise gcc il te montrera la ligne de tes erreurs. Ou utilise un compilateur qui fait de meme tout simplement.
Car la c'est trop long.
0
breaveheart19_28 Messages postés 6 Date d'inscription vendredi 17 décembre 2010 Statut Membre Dernière intervention 19 décembre 2010
18 déc. 2010 à 13:16
merci K-jah94
je vais essayer de rendre mon prog moins long
en espérant de trouver une personne qui va me répondre
merci bcp
0
breaveheart19_28 Messages postés 6 Date d'inscription vendredi 17 décembre 2010 Statut Membre Dernière intervention 19 décembre 2010
Modifié par breaveheart19_28 le 18/12/2010 à 13:10
merci groarh
la plupart du temps lorsque j'ai ecrit mon prog j'ai fait copier coller
meme la logique que j'ai utilisé et trop facile à comprendre
mais c pas grave
merci groarh une autre fois
0
breaveheart19_28 Messages postés 6 Date d'inscription vendredi 17 décembre 2010 Statut Membre Dernière intervention 19 décembre 2010
Modifié par breaveheart19_28 le 18/12/2010 à 20:33
j'ai supprimer les vérification de la date
et je l'ai rendu moins long
mais tjrs il y a le meme probleme
je ne sais pas pourquoi il n'ecrit pas dans le fichier
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct temp_ville
{
char ville [50];
int date [100];
int temp [100];
int pos ;/* la derniere position occupée*/

};
struct bloc
{
struct temp_ville val;
struct bloc *suiv;
};
typedef struct bloc bloc;

int main()
{

bloc *tete=NULL;
bloc *p=NULL ,*k=NULL;
bloc *t=NULL ,*h=NULL,*queue=NULL;
FILE *fichier;
char nomfichier[50];
char tab[50];

int i,j,a,c,arret=0,trouv=0,supprime=0,entree=0;
while(!arret)
{
arret=0;
p=malloc(sizeof(bloc));
p->val.pos=0;
if(p!=NULL)
{
printf("\n veuillez introduire le nom de la ville svp :") ;
scanf("%s",p->val.ville);
printf ("\n veuillez introduire la date svp: (la date doit etre sous le format 12122010 par exemple)");
scanf("%d",p->val.date[0]);
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",p->val.temp[0]);
if(tete==NULL)
{
tete=p;
p->suiv=NULL;
queue=tete;
}else
{
queue->suiv=p;
p->suiv=NULL;
queue=p;
}
printf("\n voulez-vous inserer une autre fois?(0 pour oui 1 pour non)");
scanf("%d",&arret);
if (!arret)
{
printf("\n veuillez introduire le nom de la ville svp :") ;
scanf("%s",tab);
/*****vérifiant si la ville qu'il vient d'inserer existe déja dans l'un des blocs******/
while ((p!=NULL) && (!trouv))
{
if(strcmp(tab,p->val.ville)==0) /*****si elle existe****/
{
if (p->val.pos<99) /*****on vérifie s'il y a de la place pour l'inserer*****/
{
trouv=1; /*pour arreter la recherche*/
p->val.pos++;
printf ("\n veuillez introduire la date svp: ");
scanf("%d",p->val.date[p->val.pos]);
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",p->val.temp[p->val.pos]);
}
}
/****dans le cas où il y a ++ blocs qui contiennent les enregisterement de la meme ville******/
p=p->suiv;
};

}
}
}/********si la ville n'a pas été inserée avant où dans le cas où tt les
blocs de cette ville étaient pleins,on reboucle et on crée un nouveau bloc
en faisant le chainage(au niveau de la queue)************/


/***************ecriture dans le fichier**************/
printf("entrer le nom du fichier svp : ");
scanf("%s",nomfichier);
fichier=fopen(nomfichier,"wb");
if (fichier!=NULL)
{
fprintf(fichier,"\n\t **** les temperatures des villes inserées *****");
p=tete;
while(p!=NULL)
{
fprintf(fichier,"\n________________________________________________________________");
fprintf(fichier,"\n| ville : | %s |",p->val.ville);
fprintf(fichier,"\n|__________|____________________________________________________|");
for(i=0;i<=p->val.pos;i++)
{ /*supposons qu'on a 12122010 ***/
c=(p->val.date[i]/1000000); /*on obtient le jour 12*/
a=(p->val.date[i]%1000000);
fprintf(fichier,"\n|date :| %d / ",c);/****|date :| 12/ *****/
c=(a/10000);
fprintf(fichier," %d / ",c); /***| date :|12/12/ **********/
c=(a/10000);
fprintf(fichier," %d / ",c); /*** |date :| 12/12/2010 |*******/
a=a%10000;
fprintf(fichier," %d | ",a);
fprintf(fichier,"temperature: | %d",p->val.temp[i]);
fprintf( fichier,"\n| ____________________________________________________________________|");
}
p=p->suiv;
};

}
fclose(fichier);
/**************supprission d'une ville*****************/
while(!supprime)
{
printf("voulez-vous supprimer tous les enregistrements d'une ville?(tapez 0 pour oui 1 pour non) ");
scanf("%d",&supprime);
if (supprime==0)
{
printf("donnez le nom de la ville a supprimer");
scanf("%s",tab);
p=tete;
while(p!=NULL)
{
if (strcmp(p->val.ville,tab)==0)
{
t=p->suiv;
free(p);
h->suiv=t;
}
h=p;
p=p->suiv;
}
}
};
/*********************ajouter un enregistrement***************/
arret=0;
while (!arret)
{
printf("voulez-vous ajouter un enregistrement?? tapez 0 pour oui 1 pour non");
scanf ("%d",arret);
if (!arret)
{
printf("\n veuillez introduire le nom de la ville svp :") ;
scanf("%s",tab);
while ((p!=NULL) && (!trouv))
{
if(!strcmp(tab,p->val.ville))
{
if (p->val.pos<99)
{
trouv=1;
p->val.pos++;
printf ("\n veuillez introduire la date svp: ");
scanf("%d", p->val.date[p->val.pos]);
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",p->val.temp[p->val.pos]);
}
}
p=p->suiv;
};
if (!trouv) /********* si la ville n'existe pas ou il n'ya pas de la place pour l'inserer*******/
{
k=malloc(sizeof(bloc)); /*** on crée un nouveau bloc*****/
k->val.pos=0;
strcpy(k->val.ville,tab); /*** on copie la nouvelle ville dans le champs ville du bloc****/
queue->suiv=k; /*** on fait le chainage *****/
k->suiv=NULL;
queue=k;/** on modifie la queue ****/
printf ("\n veuillez introduire la date svp: ");
scanf("%d",p->val.date[0]);
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",p->val.temp[0]);
}
}
};
/*************modifier la temperature d'une ville donnée à une date donnée**************/
arret=0;
while(!arret)
{
printf("voulez-vous modifier la temperature d'une ville?????(0 oui 1 non)");
scanf("%d",&arret);
if (!arret)
{
printf("introduisez le nom de la ville svp");
scanf("%s",tab);
printf ("\n veuillez introduire la date svp: ");
scanf("%d",&c);
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",&j);
p=tete;
trouv=0;
while ((p!=NULL)&&(!trouv))/****on cherche la ville et la date****/
{
if(strcmp(p->val.ville,tab)==0)
{
for (i=0;i<=p->val.pos;i++)
{
if(p->val.date[i]==c) /**** on compare les dates du blocs jusqu'à pos****/
{
p->val.temp[i]=j;/***** s'il ya egalité on ecrase l'ancienne temp****/
trouv=1; /*** la ville et la date que l'utilisateur a données existent***/
}
}
}
p=p->suiv;/*** on cherche dans les autres blocs si la ville occupe plusieurs plocs****/
}
if (!trouv)
printf("la ville ou la date que vous avez demandées n'existent pas dans le fichier");
}
}
}
0

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

Posez votre question
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 18/12/2010 à 15:38
Même problème à la compilation que celui que j'ai déjà relevé :

Description 								Ligne  
error C2440: '=' : impossible de convertir de 'void *' en 'bloc *' 	43  
error C2440: '=' : impossible de convertir de 'void *' en 'bloc *' 	179

Utilise un compilateur pour trouver tes erreurs, tu ne peux pas juste faire copier-coller du code !
La confiance n'exclut pas le contrôle
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
18 déc. 2010 à 15:37
De plus il faut également considérer les warnings suivants :

Description								Ligne
warning C4101: 'ancienneville' : variable locale non référencée		37
warning C4101: 'b' : variable locale non référencée			39
warning C4101: 'max' : variable locale non référencée			39
warning C4101: 'min' : variable locale non référencée			39
0
breaveheart19_28 Messages postés 6 Date d'inscription vendredi 17 décembre 2010 Statut Membre Dernière intervention 19 décembre 2010
18 déc. 2010 à 20:29
j'ai utilisé le compilateur du code blocks et il m'affiche pas les erreurs que vous etes en train de mentionner
concernant les warnings
j'ai oublié de supprimer ces variables lorsque j'ai modifié le code source
j'ai pas fait du copier_coller la deuxieme fois
le probleme se pose lors de l'allocation dynamique
pas au niveau des instructions de control
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
18 déc. 2010 à 20:37
Même si Code::Blocks ne les détectes pas à la compilation, l'erreur reste valable !
Tu parles de problème à l'allocation dynamique, moi aussi :

error C2440: '='	ligne 43	p=malloc(sizeof(bloc));
error C2440: '='	ligne 179	k=malloc(sizeof(bloc));

Si ça c'est pas des instructions d'allocations mémoire, je ne sais pas ce que c'est !
Remarque : je ne prétends pas que ce soit ton seul problème...
0
breaveheart19_28 Messages postés 6 Date d'inscription vendredi 17 décembre 2010 Statut Membre Dernière intervention 19 décembre 2010
19 déc. 2010 à 21:56
le probleme etait au niveau des scanf j'ai oublié de mettre & c tt
voilà le programme il marche tres bien maintenant

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct temp_ville
{
char ville [50];
int date [2];
int temp [2];
int pos ;/* la derniere position occupée*/

};
struct bloc
{
struct temp_ville val;
struct bloc *suiv;
};
struct maillon
{
int num;
struct maillon *suivant ;
};
typedef struct bloc bloc;
typedef struct maillon maillon;

int main()
{
/******** le programme que j'ai ecrit et long car il y a bcp de vérifications qui se repetent*****/
/***il n'y a pas d'erreurs dans mon programme mais pour une raison ou une autre il n'ecrit pas dans le fichier*****/

bloc *tete=NULL;
bloc *p=NULL ,*k=NULL;
bloc *t=NULL ,*h=NULL,*queue=NULL;
FILE *fichier;
maillon *g=NULL,*tete2=NULL,*queue2=NULL,*l=NULL;
char nomfichier[50];
char tab[50];
char ancienneville[50];

int i,j,a,b,c,min,max,confirme=0,cpt=0,arret=0,trouv=0,supprime=0,moy=0,entree=0,repeter=0;
while(!arret)
{
arret=1;
printf("\n veuillez introduire le nom de la ville svp :") ;
scanf("%s",tab);

instr:
p=malloc(sizeof(bloc));
p->val.pos=0;
strcpy(p->val.ville,tab);
printf ("\n veuillez introduire la date svp: ");

do{
confirme=0;

printf("\n \t le jour :") ;
scanf("%d",&a);
while((a>31) ||(a<=0))
{
printf("\n il y a une erreur \n veuillez introduire le jour une autre fois svp:");
printf("\n le jour : ");
scanf("%d",&a);

};
printf("\n voulez-vous modifier le jour ?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);


do{
confirme=0;

printf("\n \t le mois :") ;
scanf("%d",&b);
while((b>12)||(b<=0))
{
printf("\n il y a une erreur \n veuillez introduire le mois une autre fois svp:");
printf("\n le mois : ");
scanf("%d",&b);

};
printf("\n voulez-vous modifier le mois?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);

do{
confirme=0;

printf("\n \t l'annee :") ;
scanf("%d",&c);
while((c<1900)||(c<=0))
{
printf("il y a une erreur \n veuillez introduire l'annee une autre fois svp:");
printf("\n l'annee : ");
scanf("%d",&c);

};
printf("\n voulez-vous modifier l'annee?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
c=c+(b*10000)+(a*1000000);
p->val.date[0]=c;
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",&p->val.temp[0]);
if(tete==NULL)
{
tete=p;
p->suiv=NULL;
queue=tete;
}

if (tete!=NULL)
{
queue->suiv=p;
p->suiv=NULL;
queue=p;
}
do
{
printf("\n voulez-vous inserer une autre fois?(0 pour oui 1 pour non)");
scanf("%d",&repeter);
if (!repeter)
{
do{
confirme=0;

printf("\n veuillez introduire le nom de la ville svp :") ;
scanf("%s",tab);
printf("\n voulez-vous modifier le nom de la ville????? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
/*****vérifiant si la ville qu'il vient d'inserer existe déja dans l'un des blocs******/
p=tete;trouv=0;
while ((p!=NULL) && (!trouv))
{

if(strcmp(tab,p->val.ville)==0) /*****si elle existe****/
{

if (p->val.pos<1) /*****on vérifie s'il y a de la place pour l'inserer*****/
{
trouv=1; /*pour arreter la recherche*/
p->val.pos++;
printf ("\n veuillez introduire la date svp: ");

do{
confirme=0;

printf("\n \t le jour :") ;
scanf("%d",&a);
while((a>31) ||(a<0))
{
printf("\n il y a une erreur \n veuillez introduire le jour une autre fois svp:");
printf("\n le jour : ");
scanf("%d",&a);

};
printf("\n voulez-vous modifier le jour ?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);


do{
confirme=0;

printf("\n \t le mois :") ;
scanf("%d",&b);
while((b>12)||(b<0))
{
printf("\n il y a une erreur \n veuillez introduire le mois une autre fois svp:");
printf("\n le mois : ");
scanf("%d",&b);

};
printf("\n voulez-vous modifier le mois?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);

do{
confirme=0;

printf("\n \t l'annee :") ;
scanf("%d",&c);

while((c<1500)||(c<0))
{
printf("il y a une erreur \n veuillez introduire l'annee une autre fois svp:");
printf("\n l'annee : ");
scanf("%d",&c);

};
printf("\n voulez-vous modifier l'annee?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);

}while(!confirme);
c=c+(b*10000)+(a*1000000);
p->val.date[p->val.pos]=c;
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",&p->val.temp[p->val.pos]);
}

/****dans le cas où il y a ++ blocs qui contiennent les enregisterement de la meme ville******/
}
p=p->suiv;
};
if (!trouv) goto instr;

}
}while(!repeter);

}/********si la ville n'a pas été inserée avant où dans le cas où tt les
blocs de cette ville été pleins,on reboucle et on crée un nouveau bloc
en faisant le chainage(au niveau de la queue)************/


/***************ecriture dans le fichier**************/
printf("entrer le nom du fichier svp : ");
scanf("%s",nomfichier);
fichier=fopen(nomfichier,"wb");
if (fichier!=NULL)
{
fprintf(fichier,"\n\t **** les temperatures des villes inserées *****");
p=tete;
while(p!=NULL)
{
fprintf(fichier,"\n________________________________________________________________");
fprintf(fichier,"\n| ville : | %s |",p->val.ville);
fprintf(fichier,"\n|__________|____________________________________________________|");
for(i=0;i<=p->val.pos;i++)
{ /*supposons qu'on a 12122010 ***/
c=(p->val.date[i]/1000000); /*on obtient le jour 12*/
a=(p->val.date[i]%1000000);
fprintf(fichier,"\n|date : | ");/****|date :| 12/ *****/
fprintf(fichier," %d / ",c); /***| date :|12/12/ **********/
c=(a/10000);
fprintf(fichier," %d / ",c); /*** |date :| 12/12/2010 |*******/
a=a%10000;
fprintf(fichier," %d | ",a);
fprintf(fichier,"temperature: | %d",p->val.temp[i]);
fprintf( fichier,"\n| ______________________________________________________________|");
}
p=p->suiv;
};

}
fclose(fichier);




/****************************supprission d'une ville*****************************************/

while(!supprime)
{
printf("voulez-vous supprimer tous les enregistrements d'une ville?(tapez 0 pour oui 1 pour non) ");
scanf("%d",&supprime);
if (supprime==0)
{
printf("donnez le nom de la ville a supprimer");
scanf("%s",tab);
p=tete;t=p;h=p;
while(p!=NULL)
{
if (strcmp(p->val.ville,tab)==0)

{
if(p==tete)
{
tete=p->suiv;
free(p);
}else
{
if (p==queue)
{
queue=h;
h->suiv=NULL;
free(p);
}else
{
h->suiv=p->suiv;
free(p);
}
}

}
h=p;
p=p->suiv;

}
}

};
printf("entrer le nom du fichier svp : ");
scanf("%s",nomfichier);
fichier=fopen(nomfichier,"wb");
if (fichier!=NULL)
{
fprintf(fichier,"\n\t **** les temperatures des villes inserées *****");
p=tete;
while(p!=NULL)
{
fprintf(fichier,"\n________________________________________________________________");
fprintf(fichier,"\n| ville : | %s |",p->val.ville);
fprintf(fichier,"\n|__________|____________________________________________________|");
for(i=0;i<=p->val.pos;i++)
{ /*supposons qu'on a 12122010 ***/
c=(p->val.date[i]/1000000); /*on obtient le jour 12*/
a=(p->val.date[i]%1000000);
fprintf(fichier,"\n|date : | ");/****|date :| 12/ *****/
fprintf(fichier," %d / ",c); /***| date :|12/12/ **********/
c=(a/10000);
fprintf(fichier," %d / ",c); /*** |date :| 12/12/2010 |*******/
a=a%10000;
fprintf(fichier," %d | ",a);
fprintf(fichier,"temperature: | %d",p->val.temp[i]);
fprintf( fichier,"\n| ______________________________________________________________|");
}
p=p->suiv;
};

}
fclose(fichier);
/*********************ajouter un enregistrement************/
printf("voulez-vous ajouter un enregistrement?? tapez 0 pour oui 1 pour non");
scanf ("%d",&arret);
while(!arret)
{
arret=1;
printf("\n veuillez introduire le nom de la ville svp :") ;
scanf("%s",tab);

instr1:
p=malloc(sizeof(bloc));
p->val.pos=0;
strcpy(p->val.ville,tab);
printf ("\n veuillez introduire la date svp: ");

do{
confirme=0;

printf("\n \t le jour :") ;
scanf("%d",&a);
while((a>31) ||(a<=0))
{
printf("\n il y a une erreur \n veuillez introduire le jour une autre fois svp:");
printf("\n le jour : ");
scanf("%d",&a);

};
printf("\n voulez-vous modifier le jour ?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);


do{
confirme=0;

printf("\n \t le mois :") ;
scanf("%d",&b);
while((b>12)||(b<=0))
{
printf("\n il y a une erreur \n veuillez introduire le mois une autre fois svp:");
printf("\n le mois : ");
scanf("%d",&b);

};
printf("\n voulez-vous modifier le mois?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);

do{
confirme=0;

printf("\n \t l'annee :") ;
scanf("%d",&c);
while((c<1900)||(c<=0))
{
printf("il y a une erreur \n veuillez introduire l'annee une autre fois svp:");
printf("\n l'annee : ");
scanf("%d",&c);

};
printf("\n voulez-vous modifier l'annee?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
c=c+(b*10000)+(a*1000000);
p->val.date[0]=c;
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",&p->val.temp[0]);
if(tete==NULL)
{
tete=p;
p->suiv=NULL;
queue=tete;
}

if (tete!=NULL)
{
queue->suiv=p;
p->suiv=NULL;
queue=p;
}
do
{
printf("\n voulez-vous inserer une autre fois?(0 pour oui 1 pour non)");
scanf("%d",&repeter);
if (!repeter)
{
do{
confirme=0;

printf("\n veuillez introduire le nom de la ville svp :") ;
scanf("%s",tab);
printf("\n voulez-vous modifier le nom de la ville????? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
/*****vérifiant si la ville qu'il vient d'inserer existe déja dans l'un des blocs******/
p=tete;trouv=0;
while ((p!=NULL) && (!trouv))
{

if(strcmp(tab,p->val.ville)==0) /*****si elle existe****/
{

if (p->val.pos<1) /*****on vérifie s'il y a de la place pour l'inserer*****/
{
trouv=1; /*pour arreter la recherche*/
p->val.pos++;
printf ("\n veuillez introduire la date svp: ");

do{
confirme=0;

printf("\n \t le jour :") ;
scanf("%d",&a);
while((a>31) ||(a<0))
{
printf("\n il y a une erreur \n veuillez introduire le jour une autre fois svp:");
printf("\n le jour : ");
scanf("%d",&a);

};
printf("\n voulez-vous modifier le jour ?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);


do{
confirme=0;

printf("\n \t le mois :") ;
scanf("%d",&b);
while((b>12)||(b<0))
{
printf("\n il y a une erreur \n veuillez introduire le mois une autre fois svp:");
printf("\n le mois : ");
scanf("%d",&b);

};
printf("\n voulez-vous modifier le mois?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);

do{
confirme=0;

printf("\n \t l'annee :") ;
scanf("%d",&c);

while((c<1500)||(c<0))
{
printf("il y a une erreur \n veuillez introduire l'annee une autre fois svp:");
printf("\n l'annee : ");
scanf("%d",&c);

};
printf("\n voulez-vous modifier l'annee?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);

}while(!confirme);
c=c+(b*10000)+(a*1000000);
p->val.date[p->val.pos]=c;
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",&p->val.temp[p->val.pos]);
}

/****dans le cas où il y a ++ blocs qui contiennent les enregisterement de la meme ville******/
}
p=p->suiv;
};
if (!trouv) goto instr1;

}
}while(!repeter);
}


printf("entrer le nom du fichier svp : ");
scanf("%s",nomfichier);
fichier=fopen(nomfichier,"wb");
if (fichier!=NULL)
{
fprintf(fichier,"\n\t **** les temperatures des villes inserées *****");
p=tete;
while(p!=NULL)
{
fprintf(fichier,"\n________________________________________________________________");
fprintf(fichier,"\n| ville : | %s |",p->val.ville);
fprintf(fichier,"\n|__________|____________________________________________________|");
for(i=0;i<=p->val.pos;i++)
{ /*supposons qu'on a 12122010 ***/
c=(p->val.date[i]/1000000); /*on obtient le jour 12*/
a=(p->val.date[i]%1000000);
fprintf(fichier,"\n|date : | ");/****|date :| 12/ *****/
fprintf(fichier," %d / ",c); /***| date :|12/12/ **********/
c=(a/10000);
fprintf(fichier," %d / ",c); /*** |date :| 12/12/2010 |*******/
a=a%10000;
fprintf(fichier," %d | ",a);
fprintf(fichier,"temperature: | %d",p->val.temp[i]);
fprintf( fichier,"\n| ______________________________________________________________|");
}
p=p->suiv;
};

}
fclose(fichier);

/*************modifier la temperature d'une ville donnée à une date donnée**************/
arret=0;
while(!arret)
{
printf("voulez-vous modifier la temperature d'une ville?????(0 oui 1 non)");
scanf("%d",&arret);
if (!arret)
{
printf("introduisez le nom de la ville svp");
scanf("%s",tab);
printf ("\n veuillez introduire la date svp: ");

do{
confirme=0;

printf("\n \t le jour :") ;
scanf("%d",&a);
while((a>31) ||(a<0))
{
printf("\n il y a une erreur \n veuillez introduire le jour une autre fois svp:");
printf("\n le jour : ");
scanf("%d",&a);
};
printf("\n voulez-vous modifier le jour ?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
do{
confirme=0;

printf("\n \t le mois :") ;
scanf("%d",&b);
while((b>12)||(b<0))
{
printf("\n il y a une erreur \n veuillez introduire le mois une autre fois svp:");
printf("\n le mois : ");
scanf("%d",&b);

};
printf("\n voulez-vous modifier le mois?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);

do{
confirme=0;

printf("\n \t l'annee :") ;
scanf("%d",&c);

while((c<1500)||(c<0))
{
printf("il y a une erreur \n veuillez introduire l'annee une autre fois svp:");
printf("\n l'annee : ");
scanf("%d",&c);

};
printf("\n voulez-vous modifier l'annee?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);

}while(!confirme);
c=c+(b*10000)+(a*1000000);
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",&j);
p=tete;
trouv=0;
while ((p!=NULL)&&(!trouv))/****on cherche la ville et la date****/
{
if(strcmp(p->val.ville,tab)==0)
{
for (i=0;i<=p->val.pos;i++)
{
if(p->val.date[i]==c) /**** on compare les dates du blocs jusqu'à pos****/
{

p->val.temp[i]=j;/***** s'il ya egalité on ecrase l'ancienne temp****/
trouv=1; /*** la ville et la date que l'utilisateur a données existent***/
}
}
}
p=p->suiv;/*** on cherche dans les autres blocs si la ville occupe plusieurs plocs****/
}
if (!trouv)
printf("la ville ou la date que vous avez demandées n'existent pas dans le fichier");
}
}
/*************affichage de la valeur min et max et la moyenne des temperatures d'une ville *****************/
arret=0;
while(!arret)
{
printf("inserez le nom de la ville que vous voulez afficher sa temp min et max et sa temperature moyenne");
scanf("%s",tab);
p=tete;
trouv=0;
while (p!=NULL)
{
if(strcmp(p->val.ville,tab)==0)
{
trouv=1;
entree=1;
min=p->val.temp[0];
max=p->val.temp[0];
for (i=0;i<= p->val.pos;i++)
{
if(min > p->val.temp[i])
min=p->val.temp[i];
if (max< p->val.temp[i])
max=p->val.temp[i];
moy=moy+p->val.temp[i];
cpt++;

}
p=p->suiv;
/**dans le cas où il y a ++ blocs qui concernent la meme ville
on a besoin de sauvegarder le min et le max de chaque bloc de cette ville
pour faire ce la on sauvegarde chaque fois le min et le max du bloc courant dans 2 maillons
on garde le chainage aprés on compare toutes les valeurs de cette liste et on trouv le mmin et le max****/
if (entree) /**si on s'est rentré dans la boucle pour =>on a besoin de sauvegarder les nouvelles valeurs qu'on a trouvé****/
{
entree=0;/***pour eviter de sauvegarder apres chaque execution de la boucle tq****/
l=malloc(sizeof(maillon));
l->num=min;
g=malloc(sizeof(maillon));
g->num=max;
if(tete2==NULL)
{tete2=l;
l->suivant=g;
queue2=g;
g->suivant=NULL;
}
else
{
queue2->suivant=l;
l->suivant=g;
queue2=g;
g->suivant=NULL;
}
}
}
};

if (trouv)
{
moy=moy/cpt;
l=tete2;
min=l->num;
max=l->suivant->num;
while (l!=NULL) /*** on cherche dans la list les valeurs min et max ****/
{
if (min>l->num)
min=l->num;
if(max<l->num)
max=l->num;
l=l->suivant;
}
printf("\n la temperature min est : %d",min);
printf("\n la temperature max est : %d",max);
printf("\n la temperature moyenne est : %d",moy);
}
else
printf("\nla ville que vous-avez demandé n'existe pas");

printf("\nvoulez-vous afficher les temp min max et moy d'une autre ville????(0 oui 1 non)");
scanf("%d",&arret);
}
}
0