Sscanf 将读取整数而不是双精度数 (c)?
Posted
技术标签:
【中文标题】Sscanf 将读取整数而不是双精度数 (c)?【英文标题】:Sscanf will read ints but not doubles (c)? 【发布时间】:2022-01-09 07:04:42 【问题描述】:我将以下内容存储在 char 数组中
"1, 1.0, 1.000, 1.0000"
我正在尝试将其解析为一个 int 和三个双精度数
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);
输出
1 0.000000 0.000000 0.000000
【问题讨论】:
把它变成minimal reproducible example。应该不难 什么会消耗逗号? 始终检查scanf
及其亲属的返回值。
sscanf(myString, "%d ,%lf ,%lf ,%lf", ... )
。这样做会捕获逗号之前的任何空格,而逗号之后的任何空格都会被%lf
说明符自动捕获。
好的,谢谢!我错过了逗号!
【参考方案1】:
源字符串包含逗号。所以需要在sscanf
的调用中更改格式字符串。
你来了。
#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;
程序输出是
1, 1.0, 1.00, 1.000
格式字符串可以看起来更简单
"%d ,%lf ,%lf ,%lf"
注意在printf
中使用时,长度修饰符l
在转换说明符%lf
中是多余的。
【讨论】:
以上是关于Sscanf 将读取整数而不是双精度数 (c)?的主要内容,如果未能解决你的问题,请参考以下文章