Fichier séquentiel en C

Fermé
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 - 19 avril 2009 à 15:58
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 - 20 avril 2009 à 17:45
Bonjour, voici mon problème je fais du C et on utilise les fichier séquentiels, j'ai des erreurs que je n'arrive pas à résoudre.
Mes 4 première procédure sont juste( fscanf & fprintf) je devrais les faire après avec fread et fwrite. Mais mes 3 dernières procédures ont des erreurs que je n'arrive pas à corriger. Merci par avance de votre aide.

#include "client.h"
#include <stdio.h>

/* Premiere version : utilisation de fprintf, fscanf */

/*Cette procedure affiche le contenu du fichier*/
void lirefichierclient(void)
{
	CLIENT enrclient;
	FILE *fclient;
	int temp;
	fclient=fopen("Client1.dat","r");
	if(fclient!=NULL)
	{
		temp=fscanf(fclient,"%d %s %s",&enrclient.numcli,enrclient.nomcli,enrclient.coordcli);
		while(temp!=EOF)
		{
			printf("\n%d",enrclient.numcli);
			printf("\n%s",enrclient.nomcli);
			printf("\n%s",enrclient.coordcli);
			temp=fscanf(fclient,"%d %s %s", &enrclient.numcli,enrclient.nomcli,enrclient.coordcli);
		}
		fclose(fclient);
	}
	else
	{
		printf("\n Problème d'ouverture de fichier");
	}
	
}

/*Cette procedure ajoute un client, a la fin du fichier*/
void creerfichierclient(void)
{
	CLIENT enrclient;
	FILE *fclient;
	char rep[2];
	fclient=fopen("Client1.dat","w");
	if(fclient!=NULL)
	{
		do
		{
			printf("\nSaisir les données du client");
			scanf("%d",&enrclient.numcli);
			scanf("%s",enrclient.nomcli);
			scanf("%s",enrclient.coordcli);
			fprintf(fclient,"%d %s %s\n",enrclient.numcli,enrclient.nomcli,enrclient.coordcli);
			printf("\nAutre saisie(o/n)?");
			scanf("%s",rep);
		}while(rep[0]=='o');
		fclose(fclient);
	}
	else
	{
		printf("\n Problème d'ouverture de fichier\n");
	}
}

void initialisertableau(CLIENT Tclient[], int *pnbclient)
{
	CLIENT enrclient;
	FILE *fclient;
	int temp,i;
	fclient=fopen("Client1.dat","r");
	if(fclient!=NULL)
	{
		temp=fscanf(fclient,"%d %s %s",&enrclient.numcli,enrclient.nomcli,enrclient.coordcli);
		i=0;
		while(i<=MAXC-1 && temp!=EOF)
		{
			Tclient[i]=enrclient;	
			printf("\n%d %s %s",Tclient[i].numcli,Tclient[i].nomcli,Tclient[i].coordcli);
			i++;
			temp=fscanf(fclient,"%d %s %s",&enrclient.numcli,enrclient.nomcli,enrclient.coordcli);
		}
		*pnbclient=i;
		fclose(fclient);
	}
	else
	{
		printf("\n Problème d'ouverture de fichier\n");
	}
	
}
			

void sauvegardertableau(CLIENT Tclient[], int nbclient)
{
	CLIENT enrclient;
	FILE *fclient;
	int i;
	fclient=fopen("Client1.dat","w");
	for(i=0;i<nbclient;i++)
	{
		enrclient=Tclient[i];
		fprintf(fclient,"%d %s %s\n",enrclient.numcli,enrclient.nomcli,enrclient.coordcli);
	}
	fclose(fclient);	
}

void ajouterclient(CLIENT Tclient[], int *pnbclient)
{
	char cli[50];
    int num;
    char coord[50];
    printf("Saisir le nom du Client \n");
    scanf("%s",&cli);
    printf("Saisir le num du Client \n");
    scanf("%d",&num);
    printf("Saisir les coords du Client \n");
    scanf("%s",&coord);
    CLIENT enrclient;
    if(trouverclient(Tclient.nomcli,pnbclient,cli) == -1 || trouverclient(Tclient.numcli,pnbclient,num == -1))
    {
        if(*pnbclient>0 && *pnbclient<MAXC)
        {
            Tclient[*pnbclient+1].nomcli=cli;
            Tclient[*pnbclient+1].numcli=num;
            Tclient[*pnbclient+1].coordcli=coord;
            pnbclient++;
        }
        else
            printf("Probleme d'indice \n");
    }
    else
        printf(" Numero ou Nom du client deja existant \n");
}

void supprimerclient(CLIENT Tclient[], int *pnbclient)
{
    char cli[50];
    int ind;
    int i;
    printf("Saisir le nom du Client \n");
    scanf("%s",&cli);
    if(trouverclient(Tclient.nomcli,*pnbclient,cli)>0)
    {
        ind=trouverclient(Tclient.nomcli,*pnbclient,cli);
        if(*pnbclient>0 && *pnbclient<MAXC)
        {
            if(ind<=*pnbclient)
            {
                i=ind;
                while(i<pnbclient)
                {
                    Tclient[i]=Tclient[i+1];
                    i=i++;
                }
            pnbclient--;
            }
            else
                printf(" Indice passé invalide \n");
        }
        else
            printf(" Nombre effectif invalide \n");
    }
    else
        printf("Client non trouvé ");
}

int trouverclient(CLIENT Tclient[], int nbclient, char nom[])
{
    int i;
    if(nbclient<=MAXC && nbclient>0)
    {
        i=1;
        while(i<=nbclient && Tclient[i]=!nom)
        {
            i++;
        }
        if( i<=nbclient)
            return i;
        else
            return -1;
    }
    else
        printf("Nombre effectif invalide \n");
}
A voir également:

2 réponses

chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
19 avril 2009 à 16:46
Salut,
ta fonction:
int trouverclient(CLIENT Tclient[], int nbclient, char nom[])
tu lui déclares en paramètre un tableau de structure de type client et quand tu l'appelles, tu lui transmets un char* (meme si Tclient.nomcli, je sai spas trop où cela pointe....)
trouverclient(Tclient.nomcli,pnbclient,cli).
J'ai pas regardé plus que cela mais j'espère ça pourra t'aider!!
@+
0
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
20 avril 2009 à 17:45
Merci pour ton aide
0