totoharibo
Posts: 4450
Joined: Thu Jan 24, 2013 8:43 am

lecture fichier

Wed Aug 05, 2020 2:02 pm

Problème con en C (c'est pas générique RPi OK)
Un fichier texte avec 4 lignes :
(ligne vide avec juste\n)
(ligne vide avec juste\n)
(ligne vide avec juste\n)
444
avec \n (0x0A) en fin de ligne.

Je veux remplir un tableau :
char ligne_0[25]="";
char ligne_1[25]="";
char ligne_2[25]="";
char ligne_3[25]="";
char *tampon[5]={ligne_0,ligne_1,ligne_2,ligne_3} ;
rien ne marche
- fgets avec sscanf,
- fscanf
À la lecture la saisie "saute" les lignes vides pour remplir le fichier : le "444" est dans ligne_0.
Si quelqu'un a la martingale, je ne l'ai pas trouvée sur le web.

Merci d'avance

nliviu
Posts: 32
Joined: Tue Jun 23, 2020 1:24 pm
Location: Romania

Re: lecture fichier

Wed Aug 05, 2020 3:27 pm

Code: Select all

#include <stdio.h>

int main() {
  char ligne_0[25] = "";
  char ligne_1[25] = "";
  char ligne_2[25] = "";
  char ligne_3[25] = "";
  char *tampon[5] = {ligne_0, ligne_1, ligne_2, ligne_3};

  FILE *in = fopen("demo.txt", "rb");
  if (in == NULL) {
    return 1;
  }

  for (int i = 0; i < 4; ++i) {
    char buf[32];
    fgets(buf, sizeof(buf), in);
    sscanf(buf, "%s\n", tampon[i]);
  }
  fclose(in);
  
  for (int i = 0; i < 4; ++i) {
    printf("%d - %s\n", i, tampon[i]);
  }

  return 0;
}

Code: Select all

gcc -Wall -Wextra -Werror main.c -o demo

Code: Select all

$ ./demo
0 -
1 -
2 -
3 - 444

totoharibo
Posts: 4450
Joined: Thu Jan 24, 2013 8:43 am

Re: lecture fichier

Wed Aug 05, 2020 7:24 pm

OK bien vu : merci.
mais le problème est à moitié résolu. Je l'avais mal posé : plusieurs mots sur une ligne.
Un fichier texte avec 4 lignes :
(ligne vide avec juste\n)
(ligne vide avec juste\n)
(ligne vide avec juste\n)
444 555 666

plusieurs mots (je ne récupère que le premier).

Je te refais confiance pour la solution ?

totoharibo
Posts: 4450
Joined: Thu Jan 24, 2013 8:43 am

Re: lecture fichier

Wed Aug 05, 2020 8:07 pm

trouvé une partie !
changé la ligne fgets :
fgets(tampon, sizeof(buf), in);

encore des petits problèmes : j'investigue.

Return to “Français”