我猜使用scanf扫描键盘到堆栈数组的值时出现问题。我不确定如何将扫描值输入堆栈中的数组。请更正我的C代码。检查我的主要方法,我要求用户输入并尝试将它们推送到阵列。
#include<stdio.h>
#define STACKSIZE 5
struct stack
{
float data[STACKSIZE];
int sp;
};
struct stack sta={{0},-1};
//push method
void push(float n)
{
sta.data[++sta.sp]==n;
//onlystack.data[++onlystack.sp]=x;
}
//pop method
float pop()
{
return sta.data[sta.sp--];
}
//top method
float top()
{
return sta.data[sta.sp];
}
//full method
int full()
{
return (sta.sp==STACKSIZE-1);
}
//empty method
int empty()
{
return (sta.sp==-1);
}
int main()
{
int x, y;
int temp;
for (x=0; x<STACKSIZE; x++)
{
**printf("Enter float to be stored in the stack");
scanf("%f", &temp);
push(temp);**
}
while(!empty(sta))
{
for (y=0; y<STACKSIZE; y++)
{
printf("\t%f",pop());
}
}
printf("%f", top());
return 0;
}
答案 0 :(得分:1)
思想:
push()
中,您测试的是相等而不是执行赋值。temp
的类型为int。它应该是一个浮动。empty()
没有任何参数,你传递了一个。printf("%f", top())
将调用未定义的行为,因为您将打印sta.data[-1]
。pop()
打印周围使用while循环和for循环。你应该可以只做while循环。'\n'
个字符,这样可以使每个浮点数在各自的行中显示。修复这些错误后,代码似乎正常工作:
答案 1 :(得分:1)
这里的一个主要问题是您将格式"%f"
(针对浮点)提供给scanf
,但是您给它指向int
的指针。这将导致价值完全出乎意料。
此外,在您打印值的循环中,为什么有嵌套循环?外循环就是所需要的。