[英]How to store numbers in an array of structs
嘿,所以我有下面的字符串:
char teststring[50] = "A 1.0 2.0 3.0 4.0";
我有很多这种格式的字符串,我只需要将数字(而不是字母)存储在一起。 所有数字都是相关的,因此我一直在尝试制作结构数组,但遇到了一些麻烦。 我像这样设置结构(命名为wall.h文件并将其包含在主文件中)
struct example{
double x1;
double y1;
double x2;
double y2;
};
然后使用声明14个结构的数组
struct example ex[14];
然后我试图用它来扫描字符串中的值并将它们存储在数组的第一个结构中
sscanf(teststring, "A %f %f %f %f", &ex[0].x1, &ex[0].y1, &ex[0].x2, &ex[0].y2);
但是它似乎不起作用,并告诉我当我打印时该值为0.00000,而不是1.0
今天在您的情况下未定义的行为表现为0.0
。
用不正确的参数调用scanf是未定义的行为。 在您的情况下,您要告诉编译器参数类型为float *
而是传递double *
float *
。
您应该使用"%lf"
来读取double
。
sscanf(teststring, "A %lf %lf %lf %lf", &ex[0].x1, &ex[0].y1, &ex[0].x2, &ex[0].y2);
/* ^^^^^^^^^^^^^^^ */
"%f"
用于读取(使用scanf
系列函数)和打印(使用printf
系列函数) float
和printf
double
。 (它适用于float
因为可变参数函数中参数的自动提升。从一种类型的指针到另一种类型的指针(例如float *
到double *
)的自动提升是不可能的。)
"%lf"
用于读取和写入double
。
总结一下:
+--------+--------------+---------------+
| type | scanf family | printf family |
+--------+--------------+---------------+
| float | %f | %f |
+--------+--------------+---------------+
| double | %lf | %f or %lf |
+--------+--------------+---------------+
Using %lf in printf to print float would work but can be misleading to other readers
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.