2010-12-28 1 views
1

Je lis un livre et je ne peux pas comprendre ce essayer: (il est dans une langue non-anglais, donc je l'ai traduit)Comment lire un fichier, captant des données et calculer

Ecrire un programme qui demande un nombre d'étudiants n, sélectionnez n étudiants (de manière dynamique), le nom est 10 caractères et note sur 5 caractères

Créer un fichier texte note.txt de la sélection ci-dessus et ajouter des traits d'union à atteindre 10 caractères (pour les noms).

Puis lisez le fichier et à partir de celui-ci (seulement), calculez le total. Ensuite, affichez le nom et la note de ceux qui ont une note qui n'est pas supérieure à 10.

Vous devez implémenter 3 fonctions: createStudent, createFile et readFile, et n'utilisez pas de variables globales. Syntaxe: nom doit être déclaré comme char nom [10 + 1] (ie James, puis 5 traits d'union seront ajoutés pour obtenir 10 caractères) => james ----- et note: char [5+ 1] (ie 15.00 ou 07.50)

Conseils: pour convertir la note du format de texte à flotter, vous pouvez utiliser la fonction atof

J'ai créé les fonctions createStudent et Createfile. ils fonctionnent bien mais je n'arrive pas à comprendre la dernière partie (fonction readFile).

Mon fichier texte a cette forme: Bart ------ ------ 04,50 Lisa 18.00 Homer ----- 03,00

void readFile(int n){ 
FILE* file = NULL; 
double temp= 0.0, average= 0.0; 
double *total = (double*)malloc(n*sizeof(double)); 

int position = 0; 
char information[5+1]=""; 

file = fopen("c:\\myFile.txt","r"); 
fseek(file,10,SEEK_SET); 
while(fgetc(file) != EOF) 
{ 
    fscanf(file,"%5s",&information); 
    temp = atof(information); 
    total[position]= temp; 

    position++; 

    fflush(stdin); 
    fseek(file,11,SEEK_CUR); 
} 
fclose(file); 
for(int compteur=0;compteur<2;compteur++) 
{ 
    moyenne += totalNote[compteur]; 
} 

Il compile mais ne fonctionne pas et je ne peut pas comprendre pourquoi :( j'ai le sentiment que le langage C est une telle douleur dans le cul par rapport à java ou C#

Pourriez-vous s'il vous plaît me donner quelques lumières?

Répondre

1

vous voulez regarder dans strtok_r (ou strtok si strtok_r n'est pas disponible) Vous pouvez ensuite convertir votre chaîne dans un tableau de jeton avec un délimiteur d'espace. Alors il devrait être trivial de boucler le tableau pour convertir et additionner les montants.

3

Il semble que votre fichier d'entrée contient des lignes du formulaire "". S'il existe toujours un nombre fixe de chaînes/nombres par ligne, vous pouvez simplement utiliser fscanf (par exemple fscanf(file, "%*s %f %*s %f %*s %f", &number1, &number2, &number3);).

Si, d'autre part, vous pouvez avoir un nombre arbitraire de paires de chaînes/nombres par ligne, vous devriez jeter un oeil à la fonction strtok.

1

Utilisez fscanf ou une combinaison de fgets, strtok, atol (ou sscanf) pour lire le nombre.

Questions connexes