c - 如何在结构体数组中存储数字

标签 c arrays struct double scanf

嘿,我有下面的字符串:

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 *

您应该使用"%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 并打印 double。 (它适用于 float 因为可变参数函数中参数的自动提升。从一种类型的指针到其他类型的指针的自动提升是不可能的,例如 float *双*)。

"%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

关于c - 如何在结构体数组中存储数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57522365/

相关文章:

Java - 为什么 DualPivotQuicksort 有重复的代码?

python - 将 C 的 fread(&struct,....) 移植到 Python

c - 在子进程处于事件状态并运行时读取和写入

javascript - 尝试在 JavaScript 中区分否定和肯定

c - 从守护进程运行时 XOpenDisplay 失败(C 语言)

arrays - 更新整数数组 Swift

c - 如何使用 fwrite 将结构写入文件?

c - 更新结构数组值后值保持不变

c - 数字中出现了多少次数字 (Number-ception) C

c - 通过用户输入更新 GTK+3 中的面板