Bonjour à tous,
J'aimerais votre aide par rapport à un code : j'essaie de faire des sommes en ligne de notes entrées dans un fichier et je n'y arrive pas.
Pouvez-vous m'aider un peu ? je suis un peu débutant donc merci d'avance.
Bonjour à tous,
J'aimerais votre aide par rapport à un code : j'essaie de faire des sommes en ligne de notes entrées dans un fichier et je n'y arrive pas.
Pouvez-vous m'aider un peu ? je suis un peu débutant donc merci d'avance.
Salut kev98. pouvons nous voir ton code source pour deceller ou se trouve le problème?
Bonjour et bienvenue.
La politique du forum est de ne pas fournir de code tout prêt, car ça ne te permettrais pas d'apprendre convenablement.
Mais on t'aidera volontiers si tu as des questions, des blocages sur du code déjà existant.
Ton besoin se décompose en deux étapes :
Ouvrir le fichier et y extraire les notes, puis manipuler les notes extraites.
Pour ouvrir le fichier il y a les fonctions fopen / fclose et fgets / fscanf.
Manipuler les notes extraites reviens à les additionner, puis diviser la somme obtenue par le nombre de notes.
Je vous montre le code, c'est pas vraiment juste un bout de code, et je voudrais le rediriger vers un fichier. Je vous envoie le main c
Essaye de créer les deux fichiers pour voir, merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 #include <stdio.h> #include <stdlib.h> int main() { int moy=0; int a,i,c, d, j, b; FILE *fichier=NULL; fichier=fopen("Nom_Fichier.txt", "a++"); if(fichier!=NULL){ printf("fichier ouvet\n"); //else printf("Erreur"); int tab[2][4]; for(i=0;i<2;i++) { for(j=0;j<2;j++){ fscanf(fichier, "%d %d",&a, &b); printf("%d %d\n", a, b); moy=(a+b)/2; printf("La moyenne de la ligne %d est: %d\n",i, moy); } } } system("PAUSE"); system("cls"); FILE *fichier1=NULL; fichier1=fopen("Moyenne_fichier.txt", "a++"); if(fichier!=NULL){ printf("fichier ouvet\n"); for(i=0;i<2;i++) { for(j=0;j<2;j++){ fprintf(fichier1,"La moyenne de la ligne %d est: %d\n",i, moy);}}} return 0; }
Quand tu ouvres tes fichiers avec fopen, il n'existe pas de mode a++. La première fois que tu ouvres le fichier (ligne 12), utilises plutôt le mode r, car tu ne fais que lire le fichier.
La seconde fois en revanche, utilises le mode a+ (un seul +), puisque tu écris à la fin du fichier.
Tu ne fais rien si ton fichier n'a pas correctement été ouvert, ce qui peut poser problème.
Les deux lignes system ne sont pas utiles ici. Pire, la ligne system("cls") efface ce qui a été écrit juste avant. Tu devrais les enlever.
Bonjour
Autres détails: je ne comprends pas pourquoi tu fais 2 for() imbriqués puisqu'il ne se passe rien dans le for le plus extérieur. Autant alors ne faire qu'une boucle for (i=0; i < 4; i++).
Toutefois ça ne fonctionne que sur un fichier de 4 lignes. Or le principe de traitement d'un fichier ne doit pas se préoccuper du nombre de lignes qu'il contient parce que justement on n'est pas sensé le connaitre (et surtout ça peut varier).
Le principe général est alors de boucler tant que la lecture a réussi.
Exemple
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 char ligne[80]; int a, b; while (fgets(ligne, 80, fichier) != NULL) { sscanf(ligne, "%d %d", &a, &b); ... }
Et enfin un code ça s'indente correctement. Ca permet d'une part de montrer qu'on s'intéresse assez à ce qu'on fait pour avoir envie de produire un code agréable à l'oeuil et surtout ça permet ensuite de se relire et aux autres de te lire bien plus rapidement et plus agréablement.
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Partager