Problème fonction fscanf

Résolu/Fermé
CoDForlan Messages postés 44 Date d'inscription mercredi 17 juin 2020 Statut Membre Dernière intervention 21 juin 2023 - 15 févr. 2022 à 18:55
CoDForlan Messages postés 44 Date d'inscription mercredi 17 juin 2020 Statut Membre Dernière intervention 21 juin 2023 - 16 févr. 2022 à 17:25
Bonjour,
je n'arrive pas à utiliser correctement la fonction fscanf

fichier en entré :

{"data":{"base":"BTC","currency":"USD","amount":"44241.65"}}


#include <stdlib.h>
#include <stdio.h>

//[RAPPEL DE COMPILATION](pour Mingw en C) : gcc main.c -o main.exe

float editBTCprice();

int main(int argc, char const *argv[]){

	float test = editBTCprice();
	printf("%.2f\n", test);

	return 0;
}

float editBTCprice(){
	float btcPrice = 1.;
	FILE* inputFile = NULL;
	inputFile = fopen("datasets/response.json", "r");

	if(inputFile != NULL){
		fscanf(inputFile,"%*[^:]%*[^:]%*[^:]%*[^:]%*%f%*", &btcPrice);
	}
	else{
		printf("Canno't open response.json");
	}
	fclose(inputFile);
	return btcPrice;
}



je voudrais que la fonction me renvoie le prix "amount" qui est ici de 44241.65 mais il me revoit 0.00
Merci pour vos réponse bonne soirée Genoce

1 réponse

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
15 févr. 2022 à 23:03
Le premier "%*[^:]" va sauter au moins 1 caractère et s'arrête au 1er ':'
Le second débute sur le ':' donc ne lit que 0 caractère et l'analyse s'arrête. Il faut lire les ':'.
De toute façons les "%*% ... " à la fin n'ont pas de sens.
Si tu veux sauter les 4 ':' puis sauter le '"' pour lire un flottant, ça pourrait-être:
fscanf( inputFile, "%*[^:]:%*[^:]:%*[^:]:%*[^:]:\"%f", &btcPrice);
0
CoDForlan Messages postés 44 Date d'inscription mercredi 17 juin 2020 Statut Membre Dernière intervention 21 juin 2023 1
16 févr. 2022 à 10:32
mais comment tu as su parce que j'ai cherché la doc pour les flags du fscanf mais j'ai pas trouvé ?
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092 > CoDForlan Messages postés 44 Date d'inscription mercredi 17 juin 2020 Statut Membre Dernière intervention 21 juin 2023
Modifié le 16 févr. 2022 à 13:54
Cette doc (par exemple) : https://www.cplusplus.com/reference/cstdio/fscanf/

indique :

[^characters] Negated scanset Any number of characters none of them specified as characters between the brackets.


les caractères compris dans ce negated scanset ne sont donc pas consommés.
0
CoDForlan Messages postés 44 Date d'inscription mercredi 17 juin 2020 Statut Membre Dernière intervention 21 juin 2023 1 > [Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024
Modifié le 16 févr. 2022 à 17:26
merci pour tes réponses ça fais plaisir ;)
0