Bonjour Je suis assez nouveau à C Programmation et je souhaite convertir un tableau de charret ressemblant à à un flotteur qui serait 9.8, j'ai utilisé p> Mais cela m'a donné 9,0 en retour, car il est 9,8 au lieu de 9,8 dans le tableau de caractères. Comment pourrais-je facilement résoudre ce problème, sans toucher le tableau de charcuterie?
Merci d'avance :) p> p>
4 Réponses :
Par exemple
char numberlist[]="9,8 2,3 5,4 2,7 1,3";
float convertFirstNumber(const char *str, char delim)
{
char z[256];
size_t index = 0;
while(*str && *str != delim)
{
if(*str == ',') z[index++] = '.';
else z[index++] = *str;
str++;
}
z[index] = 0;
return atof(z);
}
int main()
{
printf("%.1f\n",convertFirstNuber(numberlist, ' '));
}
Ceci peut être fait avec int SSCANF (const-char * restreindre S, Const Char * restreindre le format, ...); code> et atof code> J'ai été utilisé SSCANF code> pour vous montrer une approche différente. Vous pouvez le remplacer par atof code> si vous le souhaitez. int main(){
float f, resd;
int i = 0;
char numberlist[]="9,8 2,3 5,4 2,7 1,3";
sscanf(numberlist,"%f",&f);
while(numberlist[i] != ','){
++i;
}
sscanf(&numberlist[i],",%f",&resd);
printf("%f\n", resd);
printf("%f",f+resd/10.0);
return 0;
}
Si votre chaîne utilise une virgule comme point décimal, vous pouvez définir le paramètre local sur une valeur utile avant d'analyser: rappelez-vous simplement que setlocale code> a des problèmes avec logiciel multithreaded. Et vous devez reconsidérer si vous vraiment em> voulez stocker vos données avec une virgule comme point décimal. P> p>
Adam a donné une bonne réponse.
Vous pouvez également itérer la chaîne et créer le numéro manuellement. P>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
char numberlist[] = "9,8 2,3 5,4 2,7 1,3";
int main() {
int len = strlen(numberlist);
int total = 0;
int count = 0;
for(int i = len; i >= 0; i--){
char c = numberlist[i];
if(isdigit(c)){
int number = atoi(&c);
total += round(pow(10, count)) * number;
count++;
}
}
float value = total / round(pow(10, count-1));
printf("%.2f\n", value);
}
Expliquez plus sur le rôle de "2,3 5,4 2,7 1,3".
Vous devrez peut-être jouer avec
localeconv code>et < un href = "https://fr.cppreference.com/w/c/locale/lconv" rel = "nofollow noreferrer">struct lconv code> ou il suffit d'extraire les deux parties comme entièrement entiers et composez ceux d'une valeur de point flottante (par exemple 9 + 8 / 10,0).