[C] chaine de caractere -> doubles

Résolu/Fermé
francesco - 31 déc. 2006 à 15:48
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 3 janv. 2007 à 08:05
bonjour,
Voila, je viens de faire un programme en c (avec l'api win32) qui m'ouvre un fichier puis qui le copie dans un buffer.

Le fichier ouvert est un fichier .txt qui est ecrit de la maniere suivante:

10
1.000003 (tab) 12.467332 (tab) 123.897654
12.009764 (tab) 23.887655 (tab) 123.784765

et ainsi de suite (en fait il ya autant de ligne que le premier nombre (ici 10).

Donc je copie cela dans un buffer sous la forme d'une chaine de caractere. C'est alors que vient mon probleme. Je voudrais extraire chaque nombre dans un autre objet (le premier est stocke dans un entier, jusque la ca marche avec sscanf(buffer,"%d",&n);)

Je n'arrive pas sauvegarder les autres. Je les voudrais bien sur sous la forme de double.

Merci d'avance
A voir également:

3 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
1 janv. 2007 à 23:21
Tu n'as pas besoin de passer par un buffer tu peux utiliser directement fscanf et lire ligne par ligne. Enfin comme tu le sens. Dans ton cas pour lire trois doubles :
double d1,d2,d3;
if(sscanf(buffer,"%lf %lf %lf\n",&d1,&d2,&d3) == 3){
  printf("d1 = %g\n",d1);
  printf("d2 = %G\n",d2);
  printf("d3 = %lf\n",d3);
}else{
  fprintf(stderr,"Fichier invalide\n");
}

Bonne chance
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
2 janv. 2007 à 02:14
Au pire pour convertir une chaine en entier: double atof(char *)
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
2 janv. 2007 à 14:44
atoi pour un entier, atof pour un double. Mais ce n'est en fait qu'un espèce de sscanf au final et pour lire une ligne c'est plus facile avec un sscanf (ou un fscanf) car tu liras les trois valeurs d'un coup.
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
3 janv. 2007 à 08:05
Ah oui pardon, atof converti une chaine en double.
Oui c'est vrai que c'est plus pratique avec sscanf... Je voulais juste donner une solution "générique" pour pouvoir convertir une chaine en double, que la situation implique un fichier ou pas...
0
Merci beaucoup,
je vais tout de suite essayer
francesco
0