简体   繁体   中英

Sscanf will read ints but not doubles (c)?

I have the following stored in a char array

"1, 1.0, 1.000, 1.0000"

I am trying to parse it into an int and three doubles with the following

sscanf(myString, "%d %lf %lf %lf", &(myStruct->I1), &(myStruct->D1), &(myStruct->D2), &(myStruct->D3);
printf("%d %lf %lf %lf", myStruct->I1, myStruct->D1, myStruct->D2, myStruct->D3);

outputs

1 0.000000 0.000000 0.000000

The source string contains commas. So you need to change the format string in the call of sscanf .

Here you are.

#include <stdio.h>

int main( void ) 
{
    char myString[] = "1, 1.0, 1.000, 1.0000";
    struct myStruct
    {
        int I1;
        double D1;
        double D2; 
        double D3;
    } myStruct;
    
    sscanf( myString, "%d%*[ ,]%lf%*[ ,]%lf%*[ ,]%lf", 
            &myStruct.I1,&myStruct.D1, &myStruct.D2, &myStruct.D3 );
             
    printf( "%d, %.1f, %.2f, %.3f\n", 
            myStruct.I1, myStruct.D1, myStruct.D2, myStruct.D2 );
    
    return 0;
}

The program output is

1, 1.0, 1.00, 1.000

The format string can look even simpler like

"%d ,%lf ,%lf ,%lf"

Pay attention to that the length modifier l is redundant in the conversion specifier %lf when it is used in printf .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM