Aide SVP en C

Fermé
kirikou2 - 2 nov. 2009 à 20:22
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 3 nov. 2009 à 01:08
Bonjour,
Bonjour,
je suis censé faire un programme qui demande de :
· Demande à l’utilisateur le nom (complet avec arborescence) du fichier
d’entrée (qui contient un nombre variable de « personnes »),
· Lit les données à partir de ce fichier et les range dans un tableau de
« personnes » (maximum 450)
· Demande, à l’utilisateur de créer quelques personnes (au sein d’une boucle où
l’on demande si l’utilisateur veut continuer à saisir et où la réponse ne peut
être que O ou o pour Oui et N ou n pour Non), et les range à la suite des
personnes « lues » depuis le fichier d’entrée (dans le même tableau). Pour
cela, il faut utiliser la fonction Crea du TP précédent.
· Demande à l’utilisateur le nom (complet avec arborescence) du fichier de
sortie et sauvegarde dans ce fichier la totalité du tableau (c’est à dire les
éléments lu dans le fichier d’entrée + ceux créés par l’utilisateur).
· Vérifie si le fichier de sortie a été créer et indique, par un message à l’écran,
si cette création s’est bien déroulée ou non.
Il y a un fichier personnes.txt à aller ouvrir dans le disque C depuis le programme.
Et je trouve pas mon erreur si vous pouvez m'aider svp ! merci d'avance

/* Inclusion des bibliotheque */

#include <stdio.h>
#include <conio.h>
#include <string.h>
#pragma comment(linker, "/SUBSYSTEM:CONSOLE")


/* Programme */

/* Inclusion des variables */
typedef struct Personne Personne;
struct Personne
{
int numero;
char nom[12];
char prenom[12];
char ville[12];
int code;
int taille;

};




/* Carte d'identite de la personne */

void Crea(Personne *fiche)
{
printf("Veuillez entrer votre numero d'identite SVP \n");
fflush(stdin);
scanf("%d",&fiche->numero);
printf("Veuillez entrer votre nom de famille SVP \n");
fflush(stdin);
scanf("%s",&fiche->nom);
printf("Veuillez entrer votre prenom SVP \n");
fflush(stdin);
scanf("%s",&fiche->prenom);
printf("Veuillez entrer votre ville de residence SVP \n");
fflush(stdin);
scanf("%s",&fiche->ville);
printf("Veuillez entrer votre code postal SVP \n");
fflush(stdin);
scanf("%d",&fiche->code);
printf("Veuillez entrer votre taille si inconnue saisir 0 \n");
fflush(stdin);
scanf("%d",&fiche->taille);
}


void main ()
{
int k=0;
char NomFichierEntree[255];
char NomFichierSortie[255];
Personne Tableau[400]= {0};
FILE *FichierEntree = NULL;
FILE *FichierSortie = NULL;
char reponse;
int i=0;
int j=0;
int q =0;
do {
printf("Veuillez entrer le nom (complet avec arborescence) du fichier d'entree\n");
scanf("%s",NomFichierEntree);
fflush(stdin);
FichierEntree = fopen(NomFichierEntree,"r");
}


while (FichierEntree == NULL);
if (FichierEntree == NULL)
{
printf("Le fichier d'entree n'existe pas\n");
fclose(FichierEntree);
}
else
{
while (i<450)
{
fscanf(FichierEntree,"%d %s %s %s %d %d",&Tableau[i].numero,&Tableau[i].nom,&Tableau[i].prenom,&Tableau[i].ville,&Tableau[i].code,&Tableau[i].taille);
i++;
}

while (k<5)
{
printf("%d\n",Tableau[k].numero);
k++;
}


fclose(FichierEntree);
do
{
printf("Entrez les coordonnees d'une personne SVP\n\n");

Crea(&Tableau[i+27]);
i++;
do
{
printf("Voulez-vous continuer a saisir des personnes ? Repondez par O (ou o) ou par N (ou n) SVP\n");
fflush(stdin);
scanf("%c",&reponse);
}
while (!(reponse == 'O' || reponse == 'o' || reponse == 'N' || reponse == 'n'));

}
while (reponse == 'O' || reponse == 'o');
do
{
printf("Veuillez entrer le nom (complet avec arborescence) du fichier de sortie\n");
fflush(stdin);
scanf("%s",NomFichierSortie);
FichierSortie = fopen(NomFichierSortie,"w");
if (FichierSortie == NULL)
{
printf("Le fichier de sortie n'existe pas !\n");
fclose(FichierSortie);
}

}
while (FichierSortie == NULL);

for(j=0;j<i;j++)
{
fprintf(FichierSortie,"Le Fichier de sortie est : \n\n %d %s %s %s %d %d",&Tableau[j].numero,&Tableau[j].nom,&Tableau[j].prenom,&Tableau[j].ville,&Tableau[j].code,&Tableau[j].taille);
}
fclose(FichierSortie);
}
//printf("Fin du programme !\n");
getchar();
}

1 réponse

mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
3 nov. 2009 à 01:08
Bon déjà ce serait bien d'oublier les #pragma et conio.h car ce n'est pas du code standard. Au niveau des scanf tu es sensé passer des char * et non des char ** car on ne modifie pas l'adresse de la chaîne, mais bien la chaîne elle même.

Je rappelle que char * désigne l'adresse d'un char (en l'occurrence c'est même une suite de char, ie une chaîne) et que donc un char ** désigne l'adresse d'une adresse de char. Or scanf cherche à bien à modifier une chaîne. Si tu scanais un int ça aurait un sens car comme tu le sais, en C, les paramètres de fonction sont empilés. Ainsi, si tu passais directement un int en paramètre à scanf, tu aurais l'impression qu'il ne fait rien. C'est la seule raison pour laquelle on fait un passage par pointeur.

Si tu veux t'en convaincre essaye ce code :

#include <stdio.h>

void f(int x){
  ++x;
}

void g(int *px){
  ++(*px);
}

int main(){
  int a = 10;
  printf("1) %d\n",a);
  f(a);
  printf("2) %d\n",a);
  g(a);
  printf("3) %d\n",a);
  return 0;
}


Ainsi ta fonction Crea ressemble plutôt à :
void Crea(Personne *fiche)
{
    printf("Veuillez entrer votre numero d'identite SVP \n");
    fflush(stdin);
    scanf("%d",&fiche->numero);
    printf("Veuillez entrer votre nom de famille SVP \n");
    fflush(stdin);
    scanf("%s",fiche->nom);
    printf("Veuillez entrer votre prenom SVP \n");
    fflush(stdin);
    scanf("%s",fiche->prenom);
    printf("Veuillez entrer votre ville de residence SVP \n");
    fflush(stdin);
    scanf("%s",fiche->ville);
    printf("Veuillez entrer votre code postal SVP \n");
    fflush(stdin);
    scanf("%d",&fiche->code);
    printf("Veuillez entrer votre taille si inconnue saisir 0 \n");
    fflush(stdin);
    scanf("%d",&fiche->taille);
}


(... même principe dans ton main).

Ensuite (et comme tu le vois dans cet exemple) main est sensé retourner un int, le code de retour de l'application (0 si tout va bien et une valeur autre sinon).

Ensuite je n'ai pas très bien compris ce que tu cherchais à faire ici :

Personne Tableau[400]= {0};


... mais si le but c'est de mettre à zéro 400 structures de type Personne, tu es sensé faire un memset. Pour plus de détail sur l'utilisation de memset, cherche sur google "man memset".

Bonne chance
0