Langage C

Fermé
lamou23 Messages postés 178 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 21 mars 2011 - 30 mai 2010 à 21:14
tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 - 31 mai 2010 à 09:11
salut

je voudrai bien que quelsu'un me corrige cet exo qui doit etre résolu en utilisant les fichiers:

Soit un fichier « etudiant.dat » contenant les noms, prénoms et les moyennes générales de tous les étudiants de l'Université d'Alger « Dely
Brahim ».
Écrire un programme « C » qui contient une fonction qui reçoit en paramètres le nom et le prénom d'un étudiant et retourne sa moyenne.
Écrire un 2ème programme « C » qui contient une fonction qui reçoit en paramètres le nom d'un étudiant et retourne son prénom.
N.B

*******************************************************
#include <cstdlib>
#include <iostream>
#include<stdio.h>
#include<string.h>



char moyenne (char* a,char* b)
{
FILE *fpt;
char c;
char* s1="";
char* s2="";
char* s3="";
char* s4="";
fpt= fopen("etudiant.dat","r");
if(fpt == NULL)
{
printf("Impossible d'ouvrir le fichier %s\n");
exit(1);
}
while (!feof(fpt))
{
c=getc(fpt);
while(c!='\t')
{s4="c";
strcat(s1,s4);
}
c=getc(fpt);
while (c=='') c=getc(fpt);
while((c=getc(fpt)!='/t'))
{
s4="c";
strcat(s2,s4);

}
c=getc(fpt);
while(c='') c=getc(fpt);
while((c=getc(fpt)!='/t'))
{
s4="c";
strcat(s3,s4);

}
if (strcmp(s1,a)==0)
{
if (strcmp(s2,b)==0)
{printf("la moyenne de l'etudiant est:/t%s",s3);
break;}
}
c=getc(fpt);


}
}


int main()
{
char* s1;
char* s2;
printf ("veuillez saisir le nom de l'etudiant ");
scanf("%s",s1);
printf ("veuillez saisir le prenom de l'etudiant ");
scanf("%s",s2);
system("PAUSE");
moyenne(s1,s2);
return EXIT_SUCCESS;
}
**********************************************************
merci
A voir également:

2 réponses

didji31320 Messages postés 23 Date d'inscription mardi 8 décembre 2009 Statut Membre Dernière intervention 27 mars 2011 7
30 mai 2010 à 21:21
Bonjour,

Je vois plusieurs problèmes dans ton code :

-tu ne lis pas ton fichier : voir
fread(&maVar,sizeof(TypeMaVar),1,fpt);


si tu ne lis pas le fichier et ne met pas la lecture dans une variable (ici maVar) tu ne peut pas travailler dessus,

-les fonction de chaines de caractere (strcat,strcmp, ...) ne sont uniquement pour les chaines statiques il me semble.


-dans tes saisies (s1 s2 ...) tu n'alloue pas de memoire pour stocker la saisie dynamique: voir
s1=(char*)malloc(sizeof(char));


en esperant t'avoir un minimum aidé.
0
tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 121
31 mai 2010 à 09:11
if (strcmp(s1,a)==0) {}
==> maladroit, tu peux écrire :
if (!strcmp(s1,a)) {}


char* s1="";
==> plantage assuré, car tu initialises le pointeur s1 par l'adresse d'une chaîne vide (un seul octet nul). A l'utilisation, ce que tu va mettre dedans va écraser d'autres chose, d'où éffets de bords plus ou moins catastrophiques.
0