2

そこで、ユーザー入力をスタックに挿入するプログラムを自分で作成しました。しかし、いくら頑張ってもデータを正しく挿入できませんでした。データが挿入されていることを示していますが、表示中にガベージ値が表示されます。これが私の主な機能です:

//Stack
#include<stdio.h>
#include<stdlib.h>
#define MAXSTK 10

void push(int *, int, int *, int);
//void pop();
void show_stack();
int main()
{  
int ch, ch1, stack[MAXSTK], top=-1;
do{ 
    printf("\n <<Stack MENU>>");
printf("1. Add Element");
printf("2. Delete Element");
printf("3. Show Stack");
printf("4. Exit menu");
printf("\n Enter your choice->");
scanf("%d", &ch);

    switch(ch)
    {
        case 1: printf("\n Enter element to add->");
            scanf("%d",&ch1);
            push(stack,ch1, &top, MAXSTK);
            break;
          /*   case 2:      pop();
            break;*/
        case 3: printf("\n The stack is->");
            show_stack(stack, MAXSTK);
            break;
        default: printf("\n Invalid Choice!!!");
            break;
       }
 }while(ch!=4);
return 0;
   }

そして、ここに私のプッシュ機能があります:

void push(int newstack[], int num, int *newtop, int bound)
 {
 *newtop=*newtop+1;
if(*newtop==0)
printf("\n Stack was Empty. New Value inserted.");

if(*newtop>(bound-1))
{
    printf("\n Caution! OVERFLOW!!!");

}
newstack[*newtop]=num;
}

そして、ここに私のショー機能があります:

void show_stack(int newstack[], int bound)
{
int i;
printf("\n");
for(i=0;i<=bound;i++)
printf("%d",newstack[i]);
 }     

エラーを見つけるのを手伝ってください。

4

2 に答える 2

5

配列の長さを渡し、すべての配列要素を出力しています。ガベージ値が表示されます。挿入された要素のみを印刷してみてください。

 show_stack(stack, top);

そして、あなたの関数プロトタイプは

void show_stack(int *,int);

オーバーフローに関係なく、毎回 newtop をインクリメントします。それは悪い習慣です。popping() および show_stack() 中に問題が発生します。あなたはそれを避けるためにこのようなことをすることができます.

void push(int newstack[], int num, int *newtop, int bound)
{
    // if newtop is < 0 display the message
    if(*newtop<0)
       printf("\n Stack was Empty. New Value inserted.");
    // newtop will always point to top element. so if newtop is 9 it means your stack is full. so if newtop is >= bound-1(9) stack is full
    if(*newtop>=(bound-1))
       printf("\n Caution! OVERFLOW!!!");
    else
    {
      *newtop=*newtop+1; //increment newtop
      newstack[*newtop]=num; //store value in newtop
    }
}
于 2013-09-12T06:33:12.790 に答える
4

実際のサイズではなくshow_stack、容量 ( ) で呼び出しています。MAXSTKしたがってstack、値が何であれ、すべての要素が に表示されます。top代わりに呼び出すだけで問題が解決するはずです。

別の注意: の宣言はshow_stack、実装の引数リストと一致しません。

于 2013-09-12T06:31:26.100 に答える