2014-10-10 4 views
-2
#include <stdio.h> 

#define MAXSIZE 101 

int A[MAXSIZE]; 
int top=-1; 
    int data; 
void push() 
{ 

    printf("Enter a number\n"); 
    scanf(" %d",&data); 

    if (top==MAXSIZE-1){ 
     printf("Overflow.Array size limit reached\n"); 
     return; 
    } 
    A[++top]=data; 
} 

void pop() 
{ 
    if(top==-1){ 
     printf("Empty Stack!\n"); 
     return; 
    } 
    top--; 
} 

int isEmpty() 
{ 
    if(top==-1) 
    { 
     printf("Empty yes\n"); 
     return 0; 
    } 

} 

int first() 
{ 
    return A[top]; 
} 

int printStack() 
{ 
    int i=0; 
    for(i=0;i<=top;i++) 
    { 
     printf("%d \n",A[i]); 
    } 
    return 0; 
} 


int main(int argc, char const *argv[]) 
{ 
    int choice; 
    int flag=1; 

    do{ 
     printf("The options are\n"); 
     printf("1\t\t Push\n2\t\t Pop\n3\t\t Empty\n4\t\t Top\n5\t\t Print\n\n"); 

     scanf(" Enter choice %d",&choice); 
     switch(choice) 
    { 
     case 1: 
      push(); 
      break; 
     case 2: 
      pop(); 
      break; 
     case 3: 
      isEmpty(); 
      break; 
     case 4: 
      first(); 
      break; 
     case 5: 
      printStack(); 
      break; 
     default: 
      printf("Please enter correct menu choice"); 

    } 

    printf("Wanna repeat again ? Press 1 to repeat 0 to exit\n"); 
    scanf("%d",&flag); 


    }while(flag); 

    return 0; 
} 

배열을 사용하여 스택 구현을 만들려고했습니다. 루프에서 문제가 발생했습니다. 프로그램이 실행되고 선택 사항을 묻는 메시지가 표시되면 해당 기능을 수행하고 수행 한 후 main()으로 돌아와야합니다.C 배열 스택 구현

그러나 어떤 문제가있어 어떤 기능도 수행하지 않고 루프를 다시 시작합니다.

+1

방법을 학습하십시오 프로그램을 디버깅하려면 : 디버거를 사용하거나 단순히 여기 저기에'printf'를 두어 행동이나 프로그램을 관찰하십시오. SO의 도움말 텍스트를 읽으십시오. –

+1

어떤 기능을 수행하지 않는다는 것을 어떻게 알 수 있습니까? – Degustaf

답변

0
scanf(" Enter choice %d",&choice); 

scanf() 기능을 작성하는 올바른 방법이 아니다. 화면에 메시지를 표시하려면 puts()printf()이지만 scanf()은 입력하는 데만 사용됩니다. 비정상 동작은 여기에 설명 :

scanf() reference

는, 사용자로부터 입력을 복용 한 다음 화면에 메시지를 보여주고 당신의 작업을하는 것처럼 문을 다시 작성하려면

printf("Enter your choice "); 
scanf("%d", &choice); 
0
이하는 scanf와 문을 변경

:

printf("Enter your choice :"); 
scanf("%d", &choice); 
+0

좋아요,하지만 어쩌면 당신은 * 왜 * 설명 할 수 있습니다. – Caleb

+0

scanf는 콘솔에서 읽으 므로 콘솔로 인쇄하지 않습니다. –

+0

@Caleb 콘솔에 인쇄하려면 printf() –