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関数に繰り返し渡すと、すべてのスタック要素が同じバッファを指すことになり、その内容は最後に入力された値になります。

strdupまたはmallocとを使用して内容をコピーする必要があります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 関数では で表されますが、 in を使用%fして出力されprintAll()ます。これはあまり意味がありません。

構造体の宣言がなければ、Stackコードの意図に従うのは困難です。

于 2012-10-25T14:28:31.303 に答える