problème langage C besoin d'aide... - C - Programmation
Marsh Posté le 11-12-2005 à 23:15:23
enhancer38 a écrit : Bonjour à toutes et à tous, |
Merci de lire les regles du forum et d'utiliser les balises de formattage 'fixed' ou 'cpp'.
Beaucoup d'erreurs (conception, realisation...)
Ton code commenté et en partie corrigé. Pose des questions si tu ne comprends (après avoir lu attentivement les commentaires '-ed-' ) :
|
avec
|
|
|
Marsh Posté le 13-12-2005 à 06:30:41
Merci beacoup a toi pour ta reponse...
J'ai enfin reuissi à faire marché cette affichage maintenant je suis en train de faire une fonction ajout pour pouvoir ajouter des noms et numeros de téléphone au fichier. Ma fonction à l'air de marcher puisque le programme la lance, je peu rentré des nom et numeros de telephone mais le problème et qu'il n'est ecris pas sur le fichier fevoici les sources.
Merci d'avance pour toute votre aide!
//le main
#include "fichtel.h"
void main (void)
{
char nomFichier[12];
char c;
clrscr();
printf("\t\t******-- AGENDA TELEPHONIQUE --****** " );
printf("\n\t Quel est le nom de votre fichier de travail?\n" );
printf("\t (Ancien fichier ou fichier a creer)\n\n\t=>" );
gets(nomFichier);
do {
clrscr();
printf("\n\n\t\t******FICHIER DE TRAVAIL: %s****", nomFichier);
printf("\n\n\n\n\t\t\t\t****MENU****\n" );
printf("\t\t A: -Creation et saisie du fichier-\n" );
printf("\t\t B: -Ajout d'elements a la fin du fichier-\n" );
printf("\t\t C: -Recherche d'un numero de telephone a partir du nom-\n" );
printf("\t\t D: -Affichage du contenu du fichier-\n" );
printf("\t\t E: -Changer le nom du fichier de travail-\n" );
printf("\t\t Q: -Quitter-\n\n" );
printf("\n\t\t ***Veuillez entrer votre choix***\n\t\t\t=>" );
c=getch();
fflush(stdin);
switch (c) {
case 'a':
case 'A': creation(nomFichier);
break;
case 'b':
case 'B': ajout(nomFichier);
break;
//case 'c':
//case 'C': recherche(nomFichier);
//break;
case 'd':
case 'D': affichage(nomFichier);
break;
//case 'e':
//case 'E': changer(nomFichier);
//break;
case 'q':
case 'Q':exit(-1);
default rintf("\t\tValeur erronee\n \t\tTaper une touche" );
printf(" pour continuer \n" );
}//fin du switch
getch();
fflush(stdin);
}while(1);//tant que VRAI faire ...
}
//fichtel.h fichier header
#ifndef __FICHTEL_H
#define __FICHTEL_H
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#define NB 10
personne *rech_nom(personne *, char *);
typedef ptrpersonne (*ptrfonction)(ptrpersonne,char *);
ptrfonction tabfonction[1]={rech_nom};
void creation(char *nomFichier);
void ajout(char *nomFichier);
void affichage(char *nomFichier);
typedef struct personne{
char nom[20];
long int tel;
}personne;
#endif
//fonction affichage
#include "fichtel.h"
void affichage(char *nomFichier)
{
personne pers;
FILE *ptMem;
if((ptMem=fopen(nomFichier,"r" ))==NULL)
{
printf("Probleme a l'ouverture" );
exit(-1);
}
do
{
fread(&pers,sizeof(personne),1,ptMem);
if(!feof(ptMem))
{
printf("\n\tNom : %s\n",pers.nom);
printf("\n\t\tNumero : %d",pers.tel);
}
}while(!feof(ptMem));
fclose(ptMem);
getch();
}
//et voici donc ma fonction ajout qui ne marche pas
#include "fichtel.h"
void ajout(char *nomFichier)
{
FILE *ptMem;
personne tab[NB];
personne pers;
char c;
int i;
if (c=='n') return;
if((ptMem=fopen(nomFichier,"a" ))==NULL)
{
printf("Probleme a l'ouverture du fichier %s",nomFichier);
sleep(3);
exit(-1);
}
else
{
do
{
for(i=0;i<NB;i++)
{
printf("\nEntrer le nom de la personne" );
gets(pers.nom);
if (strlen(pers.nom)==0) break;
printf("\nEntrer son numero de telephone" );
scanf("%d",&pers.tel);
fflush(stdin);
tab[i]=pers;
if(fwrite( tab, sizeof(personne),i,ptMem)!=i)
{
printf("probleme lors de l'ecriture du fichier" );
getch();
return;
}
}
if (i<NB) break;
}while(1);
fclose(ptMem);
}
}
Marsh Posté le 13-12-2005 à 07:23:46
enhancer38 a écrit : Merci beacoup a toi pour ta reponse... |
A défaut de lire sa réponse ou de prendre en compte ses remarques c'est déjà bien de le remercier d'avoir perdu de s'être donné du temps pour toi.
Marsh Posté le 13-12-2005 à 08:55:56
manu =>
enhancer => je rêve ou toutes ses remarques te sont passées au dessus ?
Marsh Posté le 13-12-2005 à 09:09:45
enhancer38 a écrit : |
T'a pas l'impression de te moquer du monde là ?
Si tu ne tiens pas compte des remarques qu'on te fait, je n'ai plus rien à ajouter.
Marsh Posté le 13-12-2005 à 15:34:41
enhancer38 a écrit :
|
Même si c'est très académique, le premier "else" ne sert à rien puisque le "exit" du then fait quitter le programme (donc la fonction). Tu peux donc l'enlever et gagner ainsi un niveau de bloc (donc un niveau d'indentation)
Pour le reste, commence par lire (sous-entendu analyser, étudier, approfondir, méditer, bûcher) les corrections de "Emmanuel Delahaye" qu'il a pris soin d'insérer dans ton code et montre lui que tu prends en compte ses remarques !!!
Marsh Posté le 11-12-2005 à 21:56:15
Bonjour à toutes et à tous,
Je suis actuellement en train de travailler sur un mini projet qui est de realiser un agenda en langage C.
Et j'ai besoin d'aide pour la fonction afficher?!
voici le source:
//mon fichier header.
//fichtel.h//
#ifndef __FICHTEL_H
#define __FICHTEL_H
#define NB 10
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
void creation(char *nomFich);
void affiche(char *nomFich);
typedef struct
{
char nom[20];
int tel;
}Personne;
#endif
//fonction creation: cette fonction crée le fichier dont le nom est passé en paramètre. Elle permet de saisir une suite de noms et de //numéro de téléphone. La saisie s'arréte si l'utilisateur frappe la touche Return.
/*creation.c*/
/*Entrées:char *nomFich:pointeur sur cune chaine de caractére*/
/*Sorties:*/
/*E/S:*/
/*Description:Permet la creation et la saisie du fichier*/
#include "fichtel.h"
void creation(char *nomFich)
{
FILE *ptMem;
Personne tab[NB];
Personne pers;
int i;
char c;
clrscr();
printf("\n\t*** CREATION D'UN NOUVEAU FICHIER DE TRAVAIL: %s ***\n", nomFich);
printf("\n\tATTENTION si ce fichier de travail existe deja \n" );
printf("\til sera irremediablement efface!!\n" );
printf("\tVoulez vous quand meme continuer (o/n)?" );
c=getch();
if (c=='n')
{
return;
}
if((ptMem = fopen(nomFich, "wt" ))== NULL)
{
printf("\tProblème lors de l'ouverture du fichier %s", nomFich);
exit(-1);
}
else
{
do
{
for(i=0;i<NB;i++)
{
printf("\nEntrer le nom de la personne" );
printf("(Taper return pour sortir) : " );
gets(pers.nom);
if (strlen(pers.nom)==0)
{
break;
}
printf("\nEntrer son numero de telephone " );
printf("(Exemple de synthaxe: 0476XXXXXX): " );
scanf("%d",&pers.tel);
fflush(stdin);
tab[i]=pers;
}
if (fwrite ( tab, sizeof(Personne),i, ptMem) !=i)
{
printf("Probleme lors de l'ecriture dans le fichier" );
getch();
return;
}
if (i<NB)
{
break;
}
}while(1);
fclose(ptMem);
}
}
//le main.
/*NomProjet:agenda.c*/
/*Emplacement:*/
/*Description:Application qui permet de gérer un agenda téléphonique*/
/*var:*/
#include "fichtel.h"
void main (void)
{
char nomFichier[12];
char c;
clrscr();
printf("\n\n\t\t****** AGENDA TELEPHONIQUE ****** " );
printf("\n\t Qu'elle est le nom de votre fichier de travail?\n" );
printf("\t \n\n=>" );
gets(nomFichier);
do
{
clrscr();
printf("\n\n\t\t\t*****MENU*****\n" );
printf("\t\t A: Creation et saisie du fichier\n" );
printf("\t\t D: Affichage du contenu du fichier\n" );
printf("\t\t Q: quitter\n\n" );
printf("\n\t\t Veuillez entrez votre choix\n\t\t\t=>" );
c=getch();
fflush(stdin);
switch (c)
{
case 'a':
case 'A':creation(nomFichier);
break;
case 'd':
case 'D':affiche(nomFichier);
break;
default: printf("\t\tValeur erronee\n \t\tTaper une touche pour continuer\n" );
}//fin du switch
getch();
fflush(stdin);
}while(1);
}
//et ma fonction affiche que je n'arrive pas à faire fonctionné aidez moi svp...
#include "fichtel.h"
void affiche(char *nomFich)
{
FILE *ptMem;
Personne pers;
ptMem=fopen(nomFich,"r" );
fread(&nom,sizeof(int),1,ptMem);
printf("%s\n",pers.nom);
fread(tel,sizeof(int),1,ptMem);
printf("\t\t\t\t tel : %d\n",&tel);
}