Bonsoir,
Actuellement sur un projet, j'ai besoin de lire dans un fichier .txt une ligne écrite sous cette forme (en théorie plusieurs, mais si sa fonctionne pour une, ca fonctionnera pour plusieurs):
Je dois stocker la chaine Bolivar dans une variable char, 48.xxxx dans une variable float, 2.xxxx dans une autre variable float.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Bolivar:48.880502:2.374922
Je me suis donc servi du scanf de cette façon pour lire les 3 données dont j'ai besoin:
Le résultat n'est pas celui que je souhaite, il ne récupère pas le nom (il affiche en tout cas un symbole bizarre), la latitude vaut -0.00000 et la longitude varie, si je lance plusieurs fois le code, la valeur sera différente (des valeurs aléatoires j'ai l'impression)
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 void main() { char nomStation[50]; float latitude[20], longitude[20]; FILE *fichier = NULL; fichier = fopen ("stations_metro.txt", "r"); if(fichier != NULL) { fscanf(fichier,"%[:]:%f:%f\n", nomStation, latitude, longitude); printf("Nom: %s\n", nomStation); printf("Lat: %f\n", *latitude); printf("Longi: %f\n\n", *longitude); } fclose(fichier); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Nom: Lat: 0.000000 Longi: -0.000000Je souhaite en plus de cela récupère les séparateurs (: après le nom, : après latitude et \n après longitude) c'est pour cela que je l'ai ai ajouté dans le fscanf.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Nom: Lat: 0.000000 Longi: -31270482477056.000000
Pour information, j'utilise Ubuntu 14.04 pour faire mon code avec l'editeur gedit et le terminal (sans dec' ^^)
J'ai beaucoup cherché sur internet, j'ai trouvé pas mal de choses, j'ai tout essayé et j'ai erreur plus ou moins farfelue et même des Erreur de segmentation (ça c'est moins bien par contre ...)
Pouvez vous m'aider sur la syntaxe de la fonction fscanf pour que cela fonctionne correctement ?
PS: J'ai essayé une méthode autre aussi, à savoir récupèrer toute la ligne avec fgets et la découper apr-s avec strtok (en l'utilisant 3 fois pour avoir les 3 valeurs), cela fonctionne pour quelques lignes et dès que je complique un peu le code (avec des malloc et tout), j'ai des erreurs de segmentation à n'en plus finir.
PS2: J'aimerais trouver une méthode simple. Sur une autre forum, on m'a suggérer de stocker tout le fichier dans un tableau a deux dimensions et de l'allouer dynamiquement, mais pour quelque chose qui est juste de récupèrer 3 valeurs, je trouve la méthode compliquée et peu fiable.
En espérant des réponses rapides,
Cordialement,
Share45.
Partager