7

ランダム変数でスタックを埋めて、それらを FILO 順序でポップアウトするように求める課題があります。なんとかスタックを埋めることができましたが、最後の要素だけが飛び出しているようです。理由はわかりません。どんな助けでも大歓迎です。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define STACK_SIZE 10
#define STACK_EMPTY -1
void push(char [], // input/ouput - the stack
          char,  // input - data being pushed onto the stack
          int *, // input/output - pointer to the index of the top of stack
          int); // constant - maximum size of stack
char     // output - data being popped out from the stack
pop(char [], // input/output - the stack
    int *); // input/output - pointer to the index of the top of stack
void push(char stack[],char item,int *top,int max_size){
    stack[*top++] =item;
}
char pop(char stack[],int *top){
    return stack[*top--];
}
int main(){
    char s[STACK_SIZE];
    int s_top = STACK_EMPTY; // Pointer points to the index of the top of the stack

    char randChar = ' ';
    int i = 0;
    int j=0;
    int randNum = 0;

    srand(time(NULL));

    for (i = 0; i < STACK_SIZE; i++){
        randNum = 33 + (int)(rand() % ((126-33)+ 1 ));
        randChar = (char) randNum;
        push(s,randChar, &s_top, STACK_SIZE);

        printf ("Random char: %c\n", randChar);

    }
    printf("-----------\n");

    for(j=STACK_SIZE; j>0; j--){
        printf("Random chars:%c\n", pop(s, &s_top));
    }
    return 0;
}
4

3 に答える 3

0

Postfix ++and--は unary よりも優先順位が高いため、 を指す*ものをインクリメントするには、 and と書く必要があります。ポインタを進めますが、これはあなたが望むものではありません。top (*top)++(*top)--*top++

次に、スタック ポインターは常にスタックに最後に追加されたものを指す必要があるため、スタックに書き込む前にスタック ポインターをインクリメントする必要があります。

stack[++(*top)] = value;

Prefix++は unary と同じ優先順位を持つ*ため、この場合、括弧は厳密には必要ありません。操作は左から右に適用されるため、++*topと解釈され++(*top)ますが、括弧は物事を明確にするのに役立ちます。

プッシュとポップは常に互いに逆であるべきです。で押す場合は++(*top)、でポップする必要があります(*top)--

于 2013-09-12T06:04:28.467 に答える