如何将扫描值推送到C中的堆栈?

时间:2014-04-16 13:14:06

标签: c arrays stack scanf

我猜使用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;
}

2 个答案:

答案 0 :(得分:1)

思想:

  1. push()中,您测试的是相等而不是执行赋值。
  2. temp的类型为int。它应该是一个浮动。
  3. empty()没有任何参数,你传递了一个。
  4. 最后printf("%f", top())将调用未定义的行为,因为您将打印sta.data[-1]
  5. 您不需要在pop()打印周围使用while循环和for循环。你应该可以只做while循环。
  6. 为了使您的输出更具可读性,您应该在每次浮动后打印'\n'个字符,这样可以使每个浮点数在各自的行中显示。
  7. 修复这些错误后,代码似乎正常工作:

答案 1 :(得分:1)

这里的一个主要问题是您将格式"%f"(针对浮点)提供给scanf,但是您给它指向int的指针。这将导致价值完全出乎意料。

此外,在您打印值的循环中,为什​​么有嵌套循环?外循环就是所需要的。