C浮点异常(核心转储)

时间:2017-02-23 13:37:19

标签: c runtime-error

我是一名研究C的菜鸟,并试图创建一个程序,提供2个输入数字的最高公约数。但是,在成功编译之后,我在向scanf提示输入数据后得到标题错误。我曾试图解决它,但不能。请忽略双斜线。

//Declare external libraries and function calls //
#include <stdio.h>
void gcdFunction (int *variable1, int *variable2);

// Main Program//
int main(void)
{
    int firstNumber = 0, secondNumber = 0;
    printf("Please enter first value \n");
    scanf("%d", &firstNumber);
    printf("Please enter second value \n");
    scanf("%d", &secondNumber);
//Call function passing 2 address parameters //
    gcdFunction(&firstNumber, &secondNumber);
}

// Call function, passing parameters as pointers //
void gcdFunction(int *variable1, int *variable2)
{
    int i, z;
    while (i != 0)
    {
        i = *variable2;
        *variable2 = *variable1 % *variable2;
        *variable1 = i;
    }
    z = *variable1;
    printf("\nThe GCD of the two values entered is: %d", z);
}

2 个答案:

答案 0 :(得分:2)

问题出现在这个循环中:

while (i !=0){
    i = *variable2;
    *variable2 = *variable1 % *variable2;
    *variable1 = i;
}

这里,如果*variable2变为0,则在下一次迭代中将其用作模数右侧,因为在检查循环条件之后{em}设置为。将其更改为

i

然后不再出现错误。

答案 1 :(得分:2)

以下代码:

int i;
while (i != 0)
{
    i = *variable2;
    *variable2 = *variable1 % *variable2;
    *variable1 = i;
}

嵌入两个问题:

  • iwhile (i != 0)
  • 使用之前未初始化 计算*variable2 时,
  • *variable1 % *variable2可能为零

第一个问题会导致程序的未定义行为。

第二个问题可能会导致零除异常。