begin process at 2012 05 29 17:20:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Probleme fwrite en langage c


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probleme fwrite en langage c

samedi 20 avril 2002 à 16:26:56 | Probleme fwrite en langage c

xavan

Voila un programme qui doit effectue un tri externe.
jai les fonctions suivante(creation pour cree le fichier principal et les fichiers auxiliaire).
Le principe est le suivant je lit les chaines du fichier de depart par paquet de 1000.
Je les trie avec un heapsort et je les met tour a tour sur les 8premiers fichiers auxiliare(ca cest le role de la fonction enregistrement).
Cest de cette fonction que vient le probleme,jai un fseek et un fwrite a la fin.
Lorsque je met fwrite ... sizeof(memoire[1000][20]) ce qui represente un paquet de 1000chaine de 20 char, le resultat est quil me met n'importe quoi au debut de chaque fichier au lieu de repartir sur tout le fichier.
Lorsque je met le nombre doctet a ecrire (20000octets) a la place dutiliser sizeof, la il me rempli le premier fichier auxiliare avec 4giga de vide. Voici le code ou est le probleme please!!!!
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BIDON 1000000
#define M 1000
#define N 8

void creation(void);
void tri_heap(char[M][20]);
void enregistrement(char[M][20], int *);

int main(void)
{
int i, j, aux;
FILE *pf;
char memoire[M][20];
clrscr();
aux=0;
creation();
pf=fopen("\\depart.dat","rb");
printf("Pourcentage de la phase d'initialisation :");
for(j=0;j<M;j++)
{
fread(&memoire[0][0],sizeof(memoire[M][20]),1,pf);
tri_heap(memoire);
/* enregistrement(memoire, &aux); */
gotoxy(44,1);printf("%d",j/10);
}
fclose(pf);
getch();
}

/*************************Creation des fichiers**************************/
void creation()
{
FILE *pf, *pa;
char a, remplissage[20], tmp[15], nom[15];
long i;
int hasard, j;
randomize();
pf=fopen("\\depart.dat","w+b");
if(pf!=NULL)
{
for(i=0;i<BIDON;i++)
{
for(j=0;j<19;j++)
{
hasard=rand();
a=97+hasard%26;
remplissage[j]=a;
}
fwrite(&remplissage,sizeof(remplissage),1,pf);
}
fclose(pf);
printf("Cr,ation du fichier principal reussie");
}
else {
printf("Impossible de cr,, le fichier principal le programme se termine");
}
strncpy(remplissage," ",20);
for(j=0;j<16;j++)
{
strcpy(nom,"auxi");
itoa(j,tmp,15);
strcat(nom,tmp);
strcat(nom,".dat");
pa=fopen(nom,"w+b");
fclose(pa);
if(pa!=NULL)
{
pa=fopen(nom,"r+b");
for(i=0;i<125000;i++)
fwrite(&remplissage,20,1,pa);
printf("\nCr,ation de %s reussie",nom);
}
else {
printf("Impossible de cr,, %s",nom);
}
fclose(pa);
}
puts("\nFin de la cr,ation des fichiers appuyez sur une touche");
getch();
clrscr();
}


/**************************FONCTION TRI_HEAP*****************************/
void tri_heap(char memoire[M][20])
{
int i,n,q,p,keep_on, g, d;
char tmp[20];
n=1;
while(n!=M)
{
q=n;
p=(q-1)/2;
while(q!=0&&strncmp(memoire[p],memoire[q],20)<1)
{
strncpy(tmp,memoire[p],20);
strncpy(memoire[p],memoire[q],20);
strncpy(memoire[q],tmp,20);
q=p;
p=(q-1)/2;
}
n=n+1;
}
/* Tri */
n=N-1;
while(n!=0)
{
strncpy(tmp,memoire[0],20);
strncpy(memoire[0],memoire[n],20);
strncpy(memoire[n],tmp,20);
n--;
/* Reconstruction du tas */
p=0;
g=1;
d=2;
keep_on=1;
while(keep_on==1)
{
if(d<=n&&(strncmp(memoire[d],memoire[g],20)>=1&&strncmp(memoire[d],memoire[p],20)>1))
{
strncpy(tmp,memoire[p],20);
strncpy(memoire[p],memoire[d],20);
strncpy(memoire[d],tmp,20);
p=d;
g=2*p+1;
d=g+1;
}
else if(d==n+1&&(strncmp(memoire[g],memoire[p],20)>1)||(d<=n&&strncmp(memoire[g],memoire[p],20)>1&&strncmp(memoire[g],memoire[d],20)>=1))
{
strncpy(tmp,memoire[p],20);
strncpy(memoire[p],memoire[g],20);
strncpy(memoire[g],tmp,20);
p=g;
g=2*p+1;
d=g+1;
}
else {
keep_on=0;
}
}
}
printf("%20s ",memoire[i][0]);
}

/************************ENREGISTREMENT************************************/
void enregistrement(char memoire[M][20],int *aux)
{
FILE *pa;
int auxi;
auxi=*aux;
auxi=auxi%8;
switch (auxi)
{
case 0:pa=fopen("auxi0.dat","r+b");break;
case 1:pa=fopen("auxi1.dat","r+b");break;
case 2:pa=fopen("auxi2.dat","r+b");break;
case 3:pa=fopen("auxi3.dat","r+b");break;
case 4:pa=fopen("auxi4.dat","r+b");break;
case 5:pa=fopen("auxi5.dat","r+b");break;
case 6:pa=fopen("auxi6.dat","r+b");break;
case 7:pa=fopen("auxi7.dat","r+b");break;
}
auxi=*aux-auxi; /* Soustrait le reste du nombre total de bloc tri, */
auxi=auxi/8; /* D,termine l'emplacement dans le fichier auxiliaire */
fseek(pa,auxi*sizeof(memoire),0); /* Place le pointeur . l'endroit voulu */
fwrite(&memoire,sizeof(memoire),1,pa);
(*aux)++;
fclose(pa);
}



Cette discussion est classée dans : pa, fopen, dat, memoire, auxi


Répondre à ce message

Sujets en rapport avec ce message

Bdd ou *.dat ? [ par doK ] Ptet que la kestion va paraitre bete, mais bon ...Kel base de donnée est le mieux pour stocker des données (par ex: une application windows pour la g FOPEN [ par lahou ] Excusez moi de poser une question aussi conne mais j'arrive pas a ouvrir un fichier txt et a l'afficher avec turbo c++ 3.0g essayé tt ce que g trouvé pb avec Fopen [ par Arrakis ] Bonjour, Je fais un programme en C avec DirectX ,a un moment je dois ouvrir un fichier pour recuperer des données mais fopen echoue ( sa valeur de r urgent...pb de cast [ par marcadet ] Bonjour j'ai le pb de cast suivant :>> char date[3]; // date a la date d'aujourd'hui>> int dat;>> dat=(int)date;>> printf("%d", dat) // -> ici Chaine de Char et Memoire ! [ par Soft ] Bonjour,Qq1 connait il un moyen pour charger le contenu d'un fichier (pouvant atteindre plusieurs dizaines de MO) dans un char *buffer;Car meme avec u liste des programmes en memoire !!! [ par FLOPPY ] salut tt le monde ,je charche un code en C pour recupererla liste des programmes charger en memoire ainsi que ce qu'il renvoie en cas d'erreur (ce qui pile memoire avec structure de pointeur [ par Nonobis ] slttjs avec ma calculatrice des p'titsproblemes ...ils faut que je recupere les valeurs saisies que cela soit nombre ou signe et les stock dans la pil Aide sur fopen [ par rayy ] Je cherche le code en c de fopen afin de mieux la comprendre, et si possible le code de fread, fwrite, fflush, pourriez vous me les donner ou m'indiqu memoire partagee [ par hobbes ] Bonjour,Qui pourrait me parler des memoires partagees ??J ai un projet compose de deux process, je dois faire passer des données d un process a l autr palindrome [ par rhumsek ] > /*Ecrire de deux façons différentes, un programme qui vérifie sans utiliser une> fonction de , si une chaîne CH introduite au clavier est un palindr


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,136 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales