C 错误:分段错误(堆芯转储)

C 错误:分段错误(堆芯转储),c,segmentation-fault,C,Segmentation Fault,知道我为什么会犯这个错误吗?它在运行并接受l和r值后出现。在编译时,我没有得到任何错误,只是在运行时。这只是我节目的前半部分。然而,我不想继续这个错误 #include <stdio.h> #include <math.h> #include <stdlib.h> main() { int y, n, q, v, w; double a, b, c, d, e, l, r; printf("Enter lower bound l:")

知道我为什么会犯这个错误吗?它在运行并接受l和r值后出现。在编译时,我没有得到任何错误,只是在运行时。这只是我节目的前半部分。然而,我不想继续这个错误

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

main()
{
    int y, n, q, v, w;
    double a, b, c, d, e, l, r;
    printf("Enter lower bound l:");
    scanf("%d, &l");
    printf("Enter upper bound r:");
    scanf("%d, &r");
    printf("The coefficients should be entered to match this form: ax^4+bx^3+cx^2+dx+e ");
    printf("Enter value of a:");
    scanf("%d, &a");
    printf("Enter value of b:");
    scanf("%d, &b");
    printf("Enter value of c:");
    scanf("%d, &c");
    printf("Enter value of d:");
    scanf("%d, &d");
    printf("Enter value of e:");
    scanf("%d, &e");
    //initializing the sign counters to zero
    q = 0;
    w = 0;
    //here we will count the lower bound sign variations with q holding the count 
    //I'm going to compare each term with the absolute value of it to check the sign
    //then I will see if they are the same or equal and increment the count as necessary

    if (a == abs(a))
    {
        y = 1;
    }
    else 
    {
        y = 0;
    }
        if ((a*4*l + b) == abs(a*4*l + b))
    {
        n = 1;
    }
    else 
    {
        n = 0;
    }
//if they are different signs then one is added to the count
if (y != n) 
{
    q++;
}
    if ((6*a*l*l + 3*b*l + c) == abs(6*a*l*l + 3*b*l + c))
    {
        y = 1;
    }
    else 
    {
        y = 0;
    }
    if (y != n) 
{
    q++;
}
if ((4*a*l*l*l + 3*b*l*l + 2*c*l + d) == abs(4*a*l*l*l + 3*b*l*l + 2*c*l + d))
    {
        n = 1;
    }
    else 
    {
        n = 0;
    }
    if (y != n) 
{
    q++;
}
    if ((a*l*l*l*l + b*l*l*l + c*l*l + d*l + e) == abs(a*l*l*l*l + b*l*l*l + c*l*l + d*l + e))
    {
        y = 1;
    }
    else 
    {
        y = 0;
    }
    if (y != n) 
{
    q++;
}

//now for the upper bounds sign changes
if (a == abs(a))
    {
        y = 1;
    }
    else 
    {
        y = 0;
    }
        if ((a*4*r + b) == abs(a*4*r + b))
    {
        n = 1;
    }
    else 
    {
        n = 0;
    }
//if they are different signs then one is added to the count
if (y != n) 
{
    w++;
}
    if ((6*a*r*r + 3*b*r + c) == abs(6*a*r*r + 3*b*r + c))
    {
        y = 1;
    }
    else 
    {
        y = 0;
    }
    if (y != n) 
{
    w++;
}
if ((4*a*r*r*r + 3*b*r*r + 2*c*r + d) == abs(4*a*r*r*r + 3*b*r*r + 2*c*r + d))
    {
        n = 1;
    }
    else 
    {
        n = 0;
    }
    if (y != n) 
{
    w++;
}
    if ((a*r*r*r*r + b*r*r*r + c*r*r + d*r + e) == abs(a*r*r*r*r + b*r*r*r + c*r*r + d*r + e))
    {
        y = 1;
    }
    else 
    {
        y = 0;
    }
    if (y != n) 
{
    w++;
}   
//now I have the number of sign changes when both bounds are put in
//the lower bound value is held in q
//the upper bound value is held in w
//the absolute value of q-w is the number of roots this will be held in v
v = abs(q-w);

if (v = 0)
{
    printf("The polynomial has no roots in the given interval.");
    return 0;
}



}
#包括
#包括
#包括
main()
{
整数y,n,q,v,w;
双a,b,c,d,e,l,r;
printf(“输入下限l:”);
scanf(“%d,&l”);
printf(“输入上限r:”);
scanf(“%d,&r”);
printf(“应输入与此表格匹配的系数:ax^4+bx^3+cx^2+dx+e”);
printf(“输入a的值:”);
scanf(“%d,&a”);
printf(“输入b的值:”);
scanf(“%d,&b”);
printf(“输入c的值:”);
scanf(“%d,&c”);
printf(“输入d的值:”);
scanf(“%d,&d”);
printf(“输入e的值:”);
scanf(“%d,&e”);
//将符号计数器初始化为零
q=0;
w=0;
//在这里,我们将计算下限符号变化,q保持计数
//我将把每个项和它的绝对值进行比较,以检查符号
//然后我将查看它们是否相同或相等,并根据需要增加计数
如果(a==abs(a))
{
y=1;
}
其他的
{
y=0;
}
如果((a*4*l+b)==abs(a*4*l+b))
{
n=1;
}
其他的
{
n=0;
}
//如果它们是不同的符号,则将一个符号添加到计数中
如果(y!=n)
{
q++;
}
如果((6*a*l*l+3*b*l+c)=abs(6*a*l*l+3*b*l+c))
{
y=1;
}
其他的
{
y=0;
}
如果(y!=n)
{
q++;
}
如果((4*a*l*l*l+3*b*l*l+2*c*l+d)==abs(4*a*l*l*l+3*b*l*l+2*c*l+d))
{
n=1;
}
其他的
{
n=0;
}
如果(y!=n)
{
q++;
}
如果((a*l*l*l+b*l*l*l+c*l*l+d*l+e)==abs(a*l*l*l+b*l*l*l+c*l+d*l+e))
{
y=1;
}
其他的
{
y=0;
}
如果(y!=n)
{
q++;
}
//现在来看看上界符号的变化
如果(a==abs(a))
{
y=1;
}
其他的
{
y=0;
}
如果((a*4*r+b)==abs(a*4*r+b))
{
n=1;
}
其他的
{
n=0;
}
//如果它们是不同的符号,则将一个符号添加到计数中
如果(y!=n)
{
w++;
}
如果((6*a*r*r+3*b*r+c)=abs(6*a*r*r+3*b*r+c))
{
y=1;
}
其他的
{
y=0;
}
如果(y!=n)
{
w++;
}
如果((4*a*r*r*r+3*b*r*r+2*c*r+d)==abs(4*a*r*r*r+3*b*r*r+2*c*r+d))
{
n=1;
}
其他的
{
n=0;
}
如果(y!=n)
{
w++;
}
如果((a*r*r*r+b*r*r*r+c*r*r+d*r+e)==abs(a*r*r*r*r+b*r*r*r+c*r+d*r+e))
{
y=1;
}
其他的
{
y=0;
}
如果(y!=n)
{
w++;
}   
//现在我有了当两个边界都加入时符号变化的数量
//下限值以q为单位
//上限值以w为单位
//q-w的绝对值是以v为单位的根数
v=绝对值(q-w);
如果(v=0)
{
printf(“多项式在给定区间内没有根”);
返回0;
}
}
更改

scanf("%d, &l");

并对其余的
scanf
s执行相同的操作。还有,改变

if (v = 0)
main()

double
的正确格式说明符是
%lf
。还有,改变

if (v = 0)
main()

搬家

return 0;
main

的末尾,当接收浮点类型时,需要使用
%f“
作为格式说明符

否则,程序行为未定义


虽然不是任何运行时崩溃的原因,但是比较多项式计算结果的浮点类型是危险的。在这个特定的实例中,您可能没有问题,但一定要小心。

分段错误是运行时错误。它表示指针使用错误(内存寻址错误)。请附加堆栈跟踪。
gcc-Wall-Werror-g main.c&&gdb./a.out
,键入
r
,然后按enter键。由于错误很简单,我想我已经盯着这个屏幕太久了,需要一些睡眠。谢谢你,先生,这个答案有错吗?
return 0;