堆栈参数检查器在C代码中不工作

堆栈参数检查器在C代码中不工作,c,C,我试图用一个自制的堆栈在C中构建一个括号检查器,但是堆栈是一个数组,它通过返回一个随机数数组来阻止我的程序工作。请帮忙 #define STACK_SIZE 100 #include <stdio.h> char stack[STACK_SIZE]; int sp=0; /* * Pushes character c onto the stack. * Returns 0 if successful. * Returns -1 if an error occurs. (S

我试图用一个自制的堆栈在C中构建一个括号检查器,但是堆栈是一个数组,它通过返回一个随机数数组来阻止我的程序工作。请帮忙

#define STACK_SIZE 100
#include <stdio.h>

char stack[STACK_SIZE];
int sp=0;

/*
 * Pushes character c onto the stack.
 * Returns 0 if successful.
 * Returns -1 if an error occurs.  (Stack full).
 */
int push (char c)
{
    if (sp >= STACK_SIZE) {
        printf("c");
        return -1;
    }
    else {
        stack[sp] = c;
        sp++;
        return 0;
    }
}

/*
 * Pops next character off the stack.
 * Returns the char if successful.
 * Returns -1 if an error occurs.  (Stack empty).
 */
int pop ()
{
    if (sp == 0) {
        return -1;
    }
    else {
        sp--;
        return stack[sp];
    }
}

/*
 * Returns the current size of the stack.
 */
int stackSize()
{
    printf("%i", sp);
    return sp;
}

void printStack()
{
    //TODO
}
int main ()
{
    int i;
    for (i = 0; i < 100; i++) {
        stack[i] = 0;
    }

    int null = 0;
    char b;
    char a = getchar();
    while (a != EOF) {
        if (a == '(') {
            if (stackSize() >= 100) {
                printf("Error. Stack Full!\n");
                return -1;
            }
            push(')');
        }
        else if (a == '{') {
            if (stackSize() >= 100) {
                printf("Error. Stack Full!\n");
                return 1;
            }
            push('}');
        }
        else if (a == '[') {
            if (stackSize() >= 100) {
                printf("Error. Stack Full!\n");
                return 1;
            }
            push(']');
        }
        else if (a == ')') {
            b = pop();
            if (stackSize() == 0) {
                printf("Found %c. No matching character\n", a);
                return 2;
            }
            else if (a != b) {
                printf("Found %c, expected ).\n", a);
                return 2;
            }
        }
        else if (a == '}') {
            b = pop();
            if (stackSize() == 0) {
                printf("Found %c. No matching character\n", a);
                return 2;
            }
            else if (a != b) {
                printf("Found %c, expected }.\n", a);
                return 2;
            }
        }
        else if (a == ']') {
            b = pop();
            if (stackSize() == 0) {
                printf("Found %c. No matching character\n", a);
                return 2;
            }
            else if (a != b) {
                printf("Found %c, expected ].\n", a);
                return 2;
            }
        }
    }
    if (stackSize() != 0) {
        printf("Expecting %c, found end of input.\n", a);
        return 3;
    }
    printf("Well formatted input.\n");
    return 4;
}
#定义堆栈大小100
#包括
字符堆栈[堆栈大小];
int sp=0;
/*
*将字符c推送到堆栈上。
*如果成功,则返回0。
*如果发生错误,则返回-1。(堆满了)。
*/
int-push(字符c)
{
如果(sp>=堆栈大小){
printf(“c”);
返回-1;
}
否则{
堆栈[sp]=c;
sp++;
返回0;
}
}
/*
*从堆栈中弹出下一个字符。
*如果成功,则返回字符。
*如果发生错误,则返回-1。(堆栈为空)。
*/
int-pop()
{
如果(sp==0){
返回-1;
}
否则{
sp--;
返回堆栈[sp];
}
}
/*
*返回堆栈的当前大小。
*/
int stackSize()
{
printf(“%i”,sp);
返回sp;
}
void printStack()
{
//待办事项
}
int main()
{
int i;
对于(i=0;i<100;i++){
堆栈[i]=0;
}
int null=0;
字符b;
char a=getchar();
while(a!=EOF){
如果(a=='('){
如果(stackSize()>=100){
printf(“错误。堆栈已满!\n”);
返回-1;
}
推(""),;
}
else如果(a=='{'){
如果(stackSize()>=100){
printf(“错误。堆栈已满!\n”);
返回1;
}
推('}');
}
else如果(a=='['){
如果(stackSize()>=100){
printf(“错误。堆栈已满!\n”);
返回1;
}
推动(']');
}
如果(a=='),则为else){
b=pop();
如果(stackSize()==0){
printf(“找到%c。没有匹配字符,\n”,a);
返回2;
}
否则,如果(a!=b){
printf(“找到%c,应为)。\n”,a);
返回2;
}
}
else如果(a=='}'){
b=pop();
如果(stackSize()==0){
printf(“找到%c。没有匹配字符,\n”,a);
返回2;
}
否则,如果(a!=b){
printf(“找到%c,应为}.\n”,a);
返回2;
}
}
else如果(a==']'){
b=pop();
如果(stackSize()==0){
printf(“找到%c。没有匹配字符,\n”,a);
返回2;
}
否则,如果(a!=b){
printf(“找到%c,预期]。\n”,a);
返回2;
}
}
}
如果(stackSize()!=0){
printf(“应为%c,找到输入的结尾。\n”,a);
返回3;
}
printf(“格式良好的输入。\n”);
返回4;
}

一旦我使用一个文件作为输入,程序就会输出大约100个随机数和“Error.Stack Full!”消息。我绕不开这件事。欢迎任何帮助,我们将不胜感激。谢谢大家!

您试过调试它吗?当您使用调试器时,程序的第一个行为与预期不同的点是什么?在Linux中,您有
gdb
您有一个无限循环。您从未重新分配
一个
,因此您将永远处理同一个字符。