2016-07-29 5 views
0

Ich habe versucht, Stack-Betrieb zu implementieren und während der Push-Operation ist der eingegebene Wert immer 0. Wenn ich eine beliebige Zahl eingeben, ist das Ergebnis in das geladene Array immer 0.Fehler im Stack Betrieb an einem Array im Push-Betrieb

//Stack Operation 
#include<stdio.h> 
#include<conio.h> 
#include<stdlib.h> 
int stack[10]; 
int top=0; 
void push() 
{ 
    int i; 
    printf("Enter the element you want to add"); 
    scanf("%d",& stack[top]); 
    top++; 
    printf("%d",stack[top]); 
    printf("The element is added\n"); 
    for(i=0;i<top;i++) { 
     printf("%d",stack[top]); 
    } 
} 
int pop() 
{ 
    top--; 
    return(stack[top]); 
} 
void display() 
{ 
    int i; 
    for(i=0;i<=top;i++); 
    { 
     printf("%d \t",stack[i]); 
    } 
} 
void main() 
{ 
    int ch; 
    clrscr(); 
    label: 
    printf("1---->Push\n"); 
    printf("2---->Pop\n"); 
    printf("3----->Display\n"); 
    printf("4-----> Exit\n"); 
    printf("Enter your choice"); 
    scanf("%d",&ch); 
    if(ch==1) { 
     clrscr(); 
     push(); 
     goto label; 
    } 
    if(ch==2) { 

     int f; 
     clrscr(); 
     f=pop(); 
     printf("Poped Element %d",f); 
     goto label; 
    } 
    if(ch==3) { 
     clrscr(); 
     display(); 
     goto label; 
    } 
    if(ch==4) { 
     exit(0); 
    } 
    getch(); 
} 
+1

Sind Sie sicher, dass Sie die Erhöhung zwischen 'scanf ("% d ", & stack [top]) wünschen; top ++; printf ("% d", stack [top]); ' –

+0

Ich glaube, ich habe meinen Fehler. –

Antwort

3

Wie ich verstehe, ist Ihre Indexierung falsch. Sie können die Wert gescannt vor dem Drucken

for(i=0;i<top;i++) 
    { 
    printf("%d",stack[i]); // change top to i 
    } 

Das heißt,

  • In push(), youre tun

    scanf("%d",& stack[top]); 
    top++; 
    printf("%d",stack[top]); 
    

    die top wird Inkrementieren ändern möchten. Sie möchten top vor dem Drucken nicht erhöhen.

  • In Ihrer push Funktion ist der Index top ungebunden, wobei das eigentliche Array gebunden ist (10 Elemente). Sie sollten mindestens einen Wert von top (<10 oder ähnlich) überprüfen, um sicherzustellen, dass der Index innerhalb der Grenzen liegt.

0

Mehr Probleme hier:

  • Beim Einfügen, erhöhen Sie top vor dem obersten Wert drucken, so druckt es immer 1 Element nach oben.
  • Wenn Sie nach dem Einfügen drucken, drucken Sie stack[top] anstelle von stack[i].
  • In display haben Sie ein streunendes Semikolon direkt nach for, was zu einem leeren Schleifenkörper führt.
+0

Ich kann keinen Fehler in der Dispaly-Funktion finden Kannst du bitte letzten Fehler ausarbeiten –

+0

@AyushBhagoliwal In 'display' hast du' für (i = 0; i <= top; i ++); '. Das Semikolon am Ende bedeutet, dass der Schleifenkörper leer ist und nichts tut. Die Blockanweisung danach läuft dann nur einmal am Ende der Schleife. – dbush