Informations pour l'utilisation des fichiers en C

Signaler
-
Messages postés
192
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
30 janvier 2008
-
J'ai un fichier avec comme contenu :





test


556565


autre test


1762167


.....





je souhaite mettre ce contenu dans ma liste chainée mais ça bloque lors de la recherche du numero de téléphone

void consulter_sms(pt_cellule *tete)

{

FILE* fichier = NULL;

char message[164] = "" ;

int num_telephone;







// Il faut dans un permier temps charger les SMS dans la liste chainée venant du fichier memoireSMS_numtel.txt :



fichier = fopen("memoireSMS_2472722.txt", "r");

while(fichier!=NULL)

{

fscanf(fichier,"%s",message); // La premiere ligne est le SMS

{

printf("Un SMS trouve : %s",message);



}

fscanf(fichier,"%d",num_telephone); // La seconde le numero de téléphone

{

printf(" . le numero de tel est le : %d\n",num_telephone);



}

ajout_tete(tete,message,num_telephone);

}



fclose(fichier);

7 réponses

Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
24
Le fscanf est assez dangeureux a utiliser car l'espace est considéré comme un séparateur
donc sur autre test il va lire "autre" et va bloquer sur "test"
http://c.developpez.com/faq/c/?page=clavier_ecran#SCREEN_scanf_fgets
Messages postés
192
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
30 janvier 2008

void consulter_sms(pt_cellule *tete)
{
FILE* fichier = NULL;
char message[164] = "" ;
int num_telephone;



// Il faut dans un permier temps charger les SMS dans la liste chainée venant du fichier memoireSMS_numtel.txt :

En essayant de corriger:

fichier = fopen("memoireSMS_2472722.txt", "r");
while(!feof(fichier))
{
if(fscanf(fichier,"%s %d", message, &num_telephone)) // ATTENTION! num_telephone n'est pas une chaine donc
// ne pas oublier le &
{
printf("Un SMS trouve : %s\n le numero de tel est le : %d\n",message, num_telephone));

ajout_tete(tete,message,num_telephone);
}
}

fclose(fichier);


<ENDL>< body></ENDL>
Messages postés
192
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
30 janvier 2008

(et j'oubliais: mieux vaut tester si l'ouverture du fichier s'est bien déroulée)

ca focntionne effectivement mais j'ai effectivement le probleme avec les espaces. Donc comment utiliser le fgets :
J'ai essayé comme ça mais ca ne fonctionne pas

fichier = fopen("memoireSMS_244342.txt", "r");
while(!feof(fichier))
{


/*
fscanf(fichier,"%[^\n]",message); // La premiere ligne est le SMS
{
printf("Un SMS trouve : %s",message);

}
*/


while (fgets(message, 160, fichier))
{
printf("%s", message); // On affiche la chaîne qu'on vient de lire
}


fscanf(fichier,"%d",&num_telephone); // La seconde le numero de téléphone
{
printf(" . le numero de tel est le : %d\n",num_telephone);

}
ajout_tete(tete,message,num_telephone);
}

fclose(fichier);
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
24
et si tu faisait simplement : fgets(message, 160, fichier);

C'est pareil . Ca indique n'importe quoi pour le numero de telephone. les 4 lignes du fichier texte sont affichées par le gets
Messages postés
192
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
30 janvier 2008

<ENDL>En fait il faut une fonction qui fasse la difference entre l'espace et le retour chariot si j'ai bien compris. Mais le mieux je pense c'est de mettre des "flags" pour detecter qd il s'agit d'un message et qd il s'agit du numero. Exemple:

[message]
"le message"
[\message]
[num]
1655416
[\num]

puis tu testes a l'aide de fscanf. Comme ca meme qd il y a des espaces ds le message, il st pris en compte convenablement.

Hors Sujet: dommage qu'il ne soit pas possible d'editer ses posts !