Problème fonction fscanf

Résolu
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

  1. 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
    1. mais comment tu as su parce que j'ai cherché la doc pour les flags du fscanf mais j'ai pas trouvé ?
      0
    2. Contributeur
      @CoDForlanCette 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
    3. @[Dal]merci pour tes réponses ça fais plaisir ;)
      0