程序应该工作但仍然最终出现分段错误

时间:2015-10-13 13:57:55

标签: c

所以一直在尝试并弄清楚为什么我的代码不想和我一起工作。在这里找不到错误..它应该让我输入所有细节,然后显示数组中的所有内容。但是我尝试过的不同的东西仍然在分段错误中结束。我在编程方面相对较新,所以批评是允许的。

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

int main (void)

{
    int j, n;
    int *A,*B, *H;
    double const e = 2.71828183;
    int x[15];
    float y[15];

    printf("\n");
    printf("  sqrt(x)*sin(1/x)\n");
    printf("y=-------------\n");
    printf("    (x+e^x)   \n\n");

    int i=0;
    while((*A)>*(B));
    {
        printf("Enter A :\n");
        scanf("%d", A);
        printf("Enter B :\n");
        scanf("%d", B);

        if((*A)>(*B))
        {
            printf("enter sometthing that.....\n");
        }
     i++;
     } 


    do
    {
        printf("Enter H:\n");
        scanf("%d", H);

        if((*H)<15)
        {
            printf("\n");
        }

        while((*H)>15)
        {
            printf("H is wrong, try again\n");
        }   
            j++;
    }   
    while((*H)>15);

    do
    {  
        x[i+1]=(x[i]+(i+1)*(*H));       
        y[i]=(sqrt(x[i])*sin(1/x[i]))/(x[i]+(pow(e,x[i])));
        i++;
        n=i-1;
    }   
    while (x[i]<=(*B));

    for(i=0;i<=n;i++)
        printf("X    |    Y\n");
        {
            printf("%d   |   %f\n", x[i], y[i]);
        }

    return 0;
}

1 个答案:

答案 0 :(得分:5)

这些指针未初始化,因此它们指向随机存储位置。

int *A,*B, *H;

在这里你要取消引用未初始化的指针(未定义的行为 - &gt;分段错误)

while((*A)>*(B));

我建议声明变量,如:

int A=1, B=0, H;

修改while循环(基于A,B的初始值,它将至少执行一次)(或使用do while):

while(A > B)

并像这样扫描:

scanf("%d", &A);