我的程序使用堆栈来输入和输出点。 我的问题是当我想输出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;
}
答案 0 :(得分:1)
您宣布userPoint
并且从未对其进行初始化,然后尝试将其分配给aPoint
。,请更改此
readPoint();
到
aPoint = readPoint();
并在readPoint()
之外采用main()
的定义,这在标准c中无效。
此外,您不需要userPoint
中声明的main()
您没有使用它,因为显然您正在使用gcc
我会建议像这样编译
gcc -Wall -Wextra -Werror -Wshadow
这样你可以防止很多有时候不容易看到的愚蠢的事情。
并使用
getchar();
而不是
system("pause");
这是具体的。