Bonjour,
quelqu'un connait-il un astuce pour deplacer ligne par ligne lors de la lecture d'un fichier recemment ouvert avec fopen?
Merci de repondre.
Bonjour,
quelqu'un connait-il un astuce pour deplacer ligne par ligne lors de la lecture d'un fichier recemment ouvert avec fopen?
Merci de repondre.
Ca peut être faisable en cherchant le caractère de fin de ligne, \n en général.
Mais je vois pas trop ce que tu cherches à faire.
Tu peux utiliser la fonction fgets:
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 #include <stdio.h> #define MAX_LEN 20 int main() { char ligne_lue[MAX_LEN + 1]; //1 place supplémentaire pour le caractère de fin de la chaine de caractères, le '\0' FILE* fichier = NULL; fichier = fopen("mon_fichier.txt", "r"); if (fichier == NULL) { printf("erreur à l'ouverture du fichier\n"); return 0; } while(fgets(ligne_lue, MAX_LEN + 1, fichier) != NULL) { printf("ligne_lue = %s\n", ligne_lue); } return 0; }
La fonction fgets() lit une ligne jusqu'au nombre de caractères précisé, et s'arrête au caractère de fin de ligne, '\n'. Le curseur est placé au début de la ligne suivante, donc si, comme ici, tu fais des fgets jusqu'à ce que ça retourne NULL (donc fin du fichier atteinte), ça va récupérer le contenu du fichier ligne par ligne.
Si les lignes font plus que MAX_LEN-1, c'est un poil plus compliqué: Tu devras faire plusieurs fgets() pour avoir la ligne complète, et tu saurais si tu as la ligne complète en cherchant le '\n' dans la chaîne retournée (avec strchr(), par exemple).
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Toutes ces reponses sont bien interessantes, elles me donnent des idees nouvelles. Toutefois je vais vous presenter le code que j'ai ecrit.
Je souhaite trouver une reponse qui pourra vraiment m'aider. 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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 #include <stdio.h> #include <stdlib.h> #include <string.h> #define TAILLE_MAX 1000 char sortie[] = "quit"; void confirmation_de_sortie(); int main(int argc, char *argv[]) { FILE* fich = NULL; char chaineUser[TAILLE_MAX]; char chaineFile[TAILLE_MAX]; long cmp; do { printf("Entrer un mot(en miniscule s.v.p): "); gets(chaineUser); if (chaineUser == sortie){ confirmation_de_sortie(); } fich = fopen("dicto.dict","r"); if ( fich == NULL){ puts("Impossible d'ouvrir le fichier demande"); } else{ do{ fscanf(fich, "%s", chaineFile); cmp = strcmp(chaineFile, chaineUser); if(cmp != 0){ // fich->_line; // fseek(fich, 0, SEEK_SET); /* C'est surtout a ce niveau que je me plante*/ } else{ fgets(chaineFile, TAILLE_MAX, fich); // Il faut continuer le code source printf("%s", chaineFile); } } while(fich == EOF); } fclose(fich); } while(chaineUser != sortie); } void confirmation_de_sortie(){ char rep; printf("Voulez-vous vraiment sortir(o/n)? "); scanf("%c", &rep); if ((rep == 'o') || (rep == 'O')){ EXIT_SUCCESS; } else if((rep == 'n') || rep == 'N'){ // instruction } else{ printf("Vous devez entre un seul caractere\n"); printf("'o' pour dire oui ou 'n' pour dire non"); } }
Partager