Rechercher : dans
Par :

Fichier séquentiel en C

Dernière réponse le 20 avr 2009 à 17:45:55 rafale69300, le 19 avr 2009 à 15:58:04 
 Signaler ce message aux modérateurs

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");
}
Configuration: Windows Vista
Safari 525.19

Meilleures réponses pour « fichier séquentiel en C » dans :
[Gravure] Graver ou lire un fichier .BIN / .CUE VoirLes fichiers .bin et .cue sont respectivement : .BIN : une image de CD, c'est-à-dire une copie binaire d'un CD ou d'un DVD sous forme d'un fichier .CUE : informations sur les pistes du disque. Les fichiers .BIN / .CUE sont utilisables par...
[Windows] Obtenir la liste des fichiers d'un dossier VoirLister le contenu d'un dossier Voici une astuce simple qui permet de lister le nom des fichiers contenus dans un répertoire. Vous pourrez obtenir en un clic les titres de vos chansons, de vos photos, etc. dans un fichier...
Fichier DLL manquant ou supprimé VoirLe système se plaint d'une librairie (DLL) manquante ? Il est possible, dans une certaine mesure de la retrouver en suivant les étapes suivantes : Afficher les fichiers cachés du système Dans le Poste de travail, cliquer sur Outils, puis Options...
Fichier NFO VoirFormat NFO Un fichier NFO est un fichier texte, c'est-à-dire un simple fichier contenant du texte au format ASCII. Un tel fichier accompagne généralement des fichiers en téléchargement pour apporter des informations additionnelles sur...
PHP - Les fichiers VoirLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...
Oracle - Les fichiers d'une base Oracle VoirLes fichiers physiques d'une base Oracle Les fichiers physiques d'une base Oracle permettent de stocker de manière persistante les données manipulées par Oracle, tandis que la mémoire sert à optimiser la vitesse de fonctionnement de la base de...

1

chuka, le 19 avr 2009 à 16:46:29

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!!
@+
Sur un malentendu, ca peut marcher!!

Répondre à chuka

2

 rafale69300, le 20 avr 2009 à 17:45:55

Merci pour ton aide

Répondre à rafale69300