调用函数不起作用

时间:2015-01-19 18:38:06

标签: c

我的程序使用堆栈来输入和输出点。 我的问题是当我想输出main函数中的点时。 像这样它工作正常:

push(readPoint());
printStackElement(pop());

但如果我想逐步调用这些功能,我就不会得到积分。 为什么pop()没有返回firstStackPoint.p,或者我必须做什么才能使它工作?

//file: pointstack.h 

#ifndef POINTSTACK_H
#define POINTSTACK_H

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

struct point
{
    float rX;
    float rY;
    float rZ;
};
typedef struct point POINT;

struct stackPoint
{
    POINT p;
    struct stackPoint *next;
};
typedef struct stackPoint STACK_POINT;
typedef STACK_POINT *STACK_POINT_PTR;


void push(POINT pushPoint);
POINT pop();
int isEmpty();
void printStackElement(POINT aPoint);

#endif


//file: pointstack.c

#include "pointstack.h" 

STACK_POINT_PTR stackTop = NULL;

void push(POINT pushPoint){
     STACK_POINT_PTR stackPoint = (STACK_POINT_PTR) malloc(sizeof(STACK_POINT));

    if(stackPoint == NULL)
    {
        printf("Error... End\n");
        exit(1);
    }

    stackPoint->p = pushPoint;
    stackPoint->next = stackTop;
    stackTop = stackPoint;

    return;
}

POINT pop(){
    STACK_POINT firstStackPoint = *stackTop;

    free(stackTop);

    stackTop = firstStackPoint.next;

    return firstStackPoint.p;
}

int isEmpty(){    
    if(stackTop == NULL)
    {
        return 1;
    }
    else {
        return 0;
    }
}

void printStackElement(POINT aPoint)
{
    printf("Point x: %f, Point y: %f, Point z: %f \n", aPoint.rX, aPoint.rY, aPoint.rZ);
    return;
}


//file: stackmain.c

#include "pointstack.h"

int main(void){

POINT readPoint() 
{
    POINT userPoint;

    printf("enter x value\n");
    scanf("%62f", &userPoint.rX);
    printf("enter y value\n");
    scanf("%62f", &userPoint.rY);
    printf("enter z value\n");
    scanf("%62f", &userPoint.rZ);

    return userPoint;
}

    POINT userPoint; 
    char choice;
    POINT aPoint;
    POINT bPoint;
    STACK_POINT firstStackPoint;


    printf("p add point, q output: \n");

    while(1)
    {
    scanf("%c", &choice);

        if(choice == 'p') 
        {
            readPoint();
            aPoint = userPoint;
            push(aPoint);

            printf("p add point, q output: \n");       
        }

        if(choice == 'q')
        {
            while(!isEmpty()){

                pop();
                bPoint = firstStackPoint.p;
                printStackElement(bPoint);

            }
            break;
        }
    }
    system("PAUSE");
    return 0;
}

1 个答案:

答案 0 :(得分:1)

您宣布userPoint并且从未对其进行初始化,然后尝试将其分配给aPoint。,请更改此

readPoint();

aPoint = readPoint();

并在readPoint()之外采用main()的定义,这在标准c中无效。

此外,您不需要userPoint中声明的main()您没有使用它,因为显然您正在使用gcc我会建议像这样编译

gcc -Wall -Wextra -Werror -Wshadow
这样你可以防止很多有时候不容易看到的愚蠢的事情。

并使用

getchar();

而不是

system("pause");

这是具体的。