0
votes

Convertir un tableau de charcuterie avec des nombres décimaux à différents flotteurs

Bonjour Je suis assez nouveau à C Programmation et je souhaite convertir un tableau de charret ressemblant à xxx

à un flotteur qui serait 9.8, j'ai utilisé XXX

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 :)

c

2 commentaires

Expliquez plus sur le rôle de "2,3 5,4 2,7 1,3".


Vous devrez peut-être jouer avec localeconv et < un href = "https://fr.cppreference.com/w/c/locale/lconv" rel = "nofollow noreferrer"> struct lconv 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).


4 Réponses :


0
votes

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, ' '));
}


0 commentaires

0
votes

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; 
}


0 commentaires

0
votes

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: xxx

rappelez-vous simplement que setlocale a des problèmes avec logiciel multithreaded. Et vous devez reconsidérer si vous vraiment voulez stocker vos données avec une virgule comme point décimal.


0 commentaires

0
votes

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);

}


0 commentaires