Lecture d'une ligne bien déterminée d'un fichier text

Fermé
ayechtein - 21 déc. 2013 à 16:14
 ayechtein - 21 déc. 2013 à 21:53
salem

Je veux copier et afficher les 3 premiers caractères(entiers) dans une ligne bien déterminée d'un fichier txt ayant cette forme:
001 mohamed
002 saleh
001 mohamed
005 ali
009 mourad
008 hend
007 mariem
006 amine
003 abir
004 alaya
Pouvez vous m'aider svp? et merci :)
A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
21 déc. 2013 à 18:26
Bonjour,

Il faut faire une boucle pour lire tout le fichier et lorsque tu es à la ligne voulue tu recuperes les 3 premiers caracteres (sscanf()).
je te laisse faire un premier jet pour ton code. Poste-le ici pour qu'on puisse te corriger.
cdlt
0
#include <string.h>
int main()
{
int i,ligne;
FILE *fic;
char s[25],code[3];
printf("donner la ligne:\n");
scanf("%c",&ligne);
fic=fopen("utilisateur.txt","r");
rewind(fic);i=0;
while(fgetc(fic)!=EOF)
{
if (i==ligne*25+1)
sscanf("%3d",&code);
i++;
}
printf("%3d",code);
return(0);
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
21 déc. 2013 à 21:31
Bonjour,
Il faut inclure stdio.h
scanf("%c",&ligne); => ligne est un entier. Utilise donc plutôt
scanf("%d", &ligne);

rewind(fic); => inutile. Tu es déjà au début du fichier.
while(fgetc(fic)!=EOF) => Mets plutôt
while(fgets(s,sizeof s, fic))

en plus tu as déclaré la variable s sans t'en servir...
</ital>if(i==ligne*25+1)</ital> Que veux-tu faire ? Je verrais plutôt
if(i==ligne)

sscanf("%3d",&code); => Tu as testé ton code au moins ? Cette erreur aurait dû être signalée... =>
sscanf(s,"%s", code);
Mais il faut mettre code sur 4 caractères. Il ne faut pas oublier que la chaîne se termine par \0.
cdlt,
0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int i,ligne,code;
FILE *fic;
char s[25];
printf("donner la ligne:\n");
scanf("%d",&ligne);
fic=fopen("utilisateur.txt","r+");
rewind(fic);i=1;
while(fgets(s,25,fic))
{
if (i==ligne)
sscanf(s,"%3d",&code);
i++;
}
printf("%3d",code);
return(0);
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
21 déc. 2013 à 21:42
Tu n'as pas tenu compte de toutes mes remarques et tu as changé des choses que je n'avais pas dit (du coup tu rajoutes des fautes). Je te conseille donc de repartir de ton post initial, d'appliquer mon commentaire.
Lorsque tu postes ton code, merci d'utiliser la balise "code" située à droite du bouton "souligné", ça sera plus lisible. Et surtout, teste ton code dans un compilateur et dis-nous ce qui ne va pas...
0
mais j'ai essayé ce dernier programme et il m'a bien marché :)
0