Informations pour l'utilisation des fichiers en C

Utilisateur anonyme - 11 mai 2006 à 12:23
THEwarrior333 Messages postés 192 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 30 janvier 2008 - 11 mai 2006 à 20:38
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

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
11 mai 2006 à 12:52
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
0
THEwarrior333 Messages postés 192 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 30 janvier 2008
11 mai 2006 à 16:51
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>
0
THEwarrior333 Messages postés 192 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 30 janvier 2008
11 mai 2006 à 16:53
(et j'oubliais: mieux vaut tester si l'ouverture du fichier s'est bien déroulée)
0
Utilisateur anonyme
11 mai 2006 à 17:25
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);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
11 mai 2006 à 17:40
et si tu faisait simplement : fgets(message, 160, fichier);
0
Utilisateur anonyme
11 mai 2006 à 18:01
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
0
THEwarrior333 Messages postés 192 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 30 janvier 2008
11 mai 2006 à 20:38
<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 !
0
Rejoignez-nous