为什么会出现浮点异常?

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++) {

关于一个不相关的说明,您可以考虑将 secInslong 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 数据类型占用的字节大小。