【问题标题】:C Floating Point exception (core dumped)C 浮点异常(核心转储)
【发布时间】:2017-02-23 13:37:18
【问题描述】:

我是一个学习 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);
}

【问题讨论】:

  • 您的意思是标记 C# 而不是 C?
  • 是的,我是菜鸟。
  • i 未初始化....
  • 你应该循环while (*variable2 != 0),而不是while (i != 0)。或者,您可以在进入循环之前设置i = *variable2,并在每次迭代结束时而不是在每次迭代开始时再次设置。
  • @barakmanos *variable2 变为零,在循环条件中检查 i 是否为零,然后在下一次迭代中使用 *variable2。这与是否在循环开始或结束时检查循环条件无关。它只修复了“未初始化”问题,而不是 FPE

标签: c runtime-error


【解决方案1】:

问题出在这个循环中:

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

这里,如果 *variable2 变为 0,则它在下一次迭代中用作模右侧,因为在检查循环条件之后设置了 i。改成

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

那么错误应该不再发生。

【讨论】:

  • 感谢先生的帮助。几个小时以来,我一直在强调这个问题,即使有帮助和互联网。
【解决方案2】:

以下代码:

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

嵌入两个问题:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多