为什么会出现浮点异常?
Why am I geting floating point exception?
当我手动迭代 5 个单独的变量时,该程序运行良好,但是当我将它们替换为那些数组和 for 循环时,我开始出现浮点异常。我试过调试,但我找不到错误是从哪里来的。
#include <stdio.h>
int main(void) {
long int secIns;
int multiplicadors[4] = {60, 60, 24, 7};
int variables[5];
int i;
printf("insereix un aquantitat entera de segons: \n");
scanf("%ld", &secIns);
variables[0] = secIns;
for (i = 1; i < sizeof variables; i++) {
variables[i] = variables[i - 1]/multiplicadors[i - 1];
variables[i - 1] -= variables[i]*multiplicadors[i - 1];
}
printf("\n%ld segons són %d setmanes %d dies %d hores %d minuts %d segons\n", secIns, variables[4], variables[3], variables[2], variables[1], variables[0]);
return 0;
}
sizeof
将给出 variables
的大小(以字节为单位),并将根据数据类型产生不同的结果。
尝试:
for (i = 1; i < 5; i++) {
...
}
问题是您正在遍历数组的末尾。原因是您的 sizeof
表达式不是您想要的。 sizeof
returns 以字节为单位的大小,而不是元素的数量。
要修复它,请将循环更改为:
for (i = 1; i < sizeof(variables)/sizeof(*variables); i++) {
关于一个不相关的说明,您可以考虑将 secIns
从 long int
更改为 int
,因为它被分配给 int
数组的一个元素,所以增加精度并没有真正帮助。
考虑这行代码:
for (i = 1; i < sizeof variables; i++) {
sizeof
并没有按照您的想法行事。您已经声明了一个包含 5 个整数的数组。在这种情况下,int 是 32 位的,这意味着它们每个使用 4 个字节的内存。如果你打印 sizeof variables
的输出,你会得到 20
因为 4 * 5 = 20.
您需要将 sizeof variables
除以第一个元素的大小。
如前所述,sizeOf returns 数组包含的字节大小。
不像java的.length,returns是数组的实际长度。当涉及到 C 时,需要更多的字节知识。
https://www.geeksforgeeks.org/data-types-in-c/
这个 link 告诉您更多关于数据类型和它们占用的内存(字节)的信息。
您也可以 sizeOf yourArrayName/sizeOf (int)
。 sizeOf(datatype) returns 数据类型占用的字节大小。
当我手动迭代 5 个单独的变量时,该程序运行良好,但是当我将它们替换为那些数组和 for 循环时,我开始出现浮点异常。我试过调试,但我找不到错误是从哪里来的。
#include <stdio.h>
int main(void) {
long int secIns;
int multiplicadors[4] = {60, 60, 24, 7};
int variables[5];
int i;
printf("insereix un aquantitat entera de segons: \n");
scanf("%ld", &secIns);
variables[0] = secIns;
for (i = 1; i < sizeof variables; i++) {
variables[i] = variables[i - 1]/multiplicadors[i - 1];
variables[i - 1] -= variables[i]*multiplicadors[i - 1];
}
printf("\n%ld segons són %d setmanes %d dies %d hores %d minuts %d segons\n", secIns, variables[4], variables[3], variables[2], variables[1], variables[0]);
return 0;
}
sizeof
将给出 variables
的大小(以字节为单位),并将根据数据类型产生不同的结果。
尝试:
for (i = 1; i < 5; i++) {
...
}
问题是您正在遍历数组的末尾。原因是您的 sizeof
表达式不是您想要的。 sizeof
returns 以字节为单位的大小,而不是元素的数量。
要修复它,请将循环更改为:
for (i = 1; i < sizeof(variables)/sizeof(*variables); i++) {
关于一个不相关的说明,您可以考虑将 secIns
从 long int
更改为 int
,因为它被分配给 int
数组的一个元素,所以增加精度并没有真正帮助。
考虑这行代码:
for (i = 1; i < sizeof variables; i++) {
sizeof
并没有按照您的想法行事。您已经声明了一个包含 5 个整数的数组。在这种情况下,int 是 32 位的,这意味着它们每个使用 4 个字节的内存。如果你打印 sizeof variables
的输出,你会得到 20
因为 4 * 5 = 20.
您需要将 sizeof variables
除以第一个元素的大小。
如前所述,sizeOf returns 数组包含的字节大小。 不像java的.length,returns是数组的实际长度。当涉及到 C 时,需要更多的字节知识。
https://www.geeksforgeeks.org/data-types-in-c/
这个 link 告诉您更多关于数据类型和它们占用的内存(字节)的信息。
您也可以 sizeOf yourArrayName/sizeOf (int)
。 sizeOf(datatype) returns 数据类型占用的字节大小。