0

所以由于某种原因,这个函数似乎将所有相同的值推入堆栈(或者只是打印相同的值;我想它实际上可能与我也包含的 printAll 函数有关。)?问题是,对于元素数组(它是一个整数数组), printAll 适当地循环遍历这些值。但是关于 charElement 数组的任何事情,printAll 函数只打印 charElements 函数中每个值的最新值。知道为什么会这样吗?

void pushString(Stack *S, char element[])
{        
    /* If the stack is full, we cannot push an element into it as there is no space for it.*/        
    if(S->size == S->capacity)        
    {                
        printf("Stack is Full\n");        
    }        
    else        
    {                
        /* Push an element on the top of it and increase its size by one*/ 
        S->charElements[S->size++] = element;
        S->elements[S->size-1] = '\n'; 
    }        
    return;
}



void printAll(Stack *S)
// NOTE:  Called w/ user input 'f'
// PRE:   Stack S is initialized
// POST:  Print all values from the stack
//    Do NOT alter anything
{

    int i; 
    for(i = 0; i < S->size; i++)
    {
        printf("%d \n", i);
        if(S->charElements[i] == "\n")
        {
            printf("%.2f \n", (float)S->elements[i]);   
        }
        else if(S->elements[i] == '\n')
        { 
            printf("%s \n", S->charElements[i]); 
        }
    }
}
4

2 回答 2

0
S->charElements[S->size++] = element;

仅将指针复制到传入的char* element.

如果您使用同一个缓冲区读取输入,然后将其pushString重复传递给函数,则所有堆栈元素最终都指向同一个缓冲区,其内容是最后输入的值。

您需要使用strdupormalloc和复制内容strcpy

S->charElements[S->size++] = strdup(element);

分别

S->charElements[S->size] = malloc(strlen(element) + 1);
// check for NULL
strcpy(S->charElements[S->size++], element);
于 2012-10-25T14:27:06.790 回答
0

代码很奇怪。元素char []在 push 函数中由 表示,但使用%fin打印printAll()。这对我来说没有多大意义。

如果没有Stack结构的声明,就很难遵循代码的意图。

于 2012-10-25T14:28:31.303 回答