使用数组创建堆栈

时间:2014-03-10 18:33:02

标签: c arrays stack

我正试图通过使用一个数组来为creatin编写一个堆栈的代码,我倾向于使用动态内存分配。问题是它不是为了确定是否应该退出循环而对takin'scannin'进行响应。

#include<stdio.h>

static int top, size, *a, x;

stfull(){
    if(top<size) x = 0;
    else x = 1;
}

stempty(){
    if(!top) x = 1;
    else x = 0;
}

push(int z){
    if(x){
        printf("stack full\tstack overflow\n");
        return;
    }
    else{
        a[top] = z;
        top++;
        return;
    }
}

pop(){
    if(x){
        printf("empty stack\tstack underflow\n");
        return;
    }
    else{
        printf("%d  ", a[top]);
        top--;
        return;
    }
}

main(){
    int num, res;
    char ans = 'y';

    printf("array size:\t");
    scanf("%d", &size);

    a = malloc(size*sizeof(int));

    printf("choose number for result\n1. push elements\n2.display elements\n3.exit\n");
    scanf("%d", &res);

    switch(res){
        case 1: 
            while(ans == 'y'){
                printf("enter a number\t");
                scanf("%d", &num);

                push(num);

                printf("enter more?\t");
                ans = getchar();
            }   
        break;
        case 2:
            do{
                pop();

                printf("pop more?\t");
                ans = getchar();
            }while(ans == 'y');
        break;
        case 3: 
            exit(1);
    }
}

示例输入

数组大小:5

选择结果编号

1。推送元素

2.display elements

3.exit
1

输入数字 3

输入更多内容?

该程序在此之后退出,而不管ans的值如何。任何人都可以更正我的代码吗?

2 个答案:

答案 0 :(得分:0)

你的代码退出了,因为getchar()读取\ n [enter]作为ans的​​字符 你的意见是

enter a number 3[enter]

所以

ans=getchar();

读取[enter]。所以一个简单的解决方案是使用getchar()两次

getchar();
ans=getchar();

您的代码将继续有效

答案 1 :(得分:0)

你可以添加这一行

fseek(stdin,0,SEEK_END);
在每个getchar之前

,以确保它不会读取任何先前的字符。它基本上清除缓冲区,或者更确切地说,将读取点移动到缓冲区的末尾。