스택 배열 관련 질문입니다. visual studio 2022입니다.

스택 배열 관련 질문입니다. visual studio 2022입니다.

작성일 2022.04.01댓글 1건
    게시물 수정 , 삭제는 로그인 필요

#include <stdio.h>

#define stackLen 5
typedef char data;

struct Stack {
    data Arr[stackLen];
    int top;
} S;

void stack() {
    S.top = -1;
}

int IsEmpty() {
    if (S.top <= -1)
        return 1;  //empty
    else
        return 0;  //not empty
}

void showStackData() {
    printf("\n< stack > : ");
    for (int x = 0; x <= S.top; x++) {
        printf("%c ", S.Arr[x]);
    }
}

void push(data e) {
    if (S.top >= stackLen - 1) {
        printf("\nError : 삽입불가! 포화상태입니다.");
    }
    S.top += 1;
    S.Arr[S.top] = e;
    showStackData();
}

char pop() {
    if (S.top < 0) {
        printf("\nError : 삭제불가! 공백상태입니다.");
        return '\n';
    }
    S.top -= 1;
    showStackData();
    return S.Arr[S.top + 1];
}

int  main() {
    int num;
    char val;

    stack();  //스택 생성

    while (1) {
        printf("\n< Stack > 1. 자료 삽입 2. 자료 삭제 3. 프로그램 종료 : ");
        do {
            scanf("%d", &num);
        } while (num < 1 || num > 3);

        switch (num) {
        case 1: printf("삽입할 값은? ");
            while (getchar() != '\n');  //버퍼에 남아 있는 자료 없애기...
            scanf("%c", &val);
            push(val); break;
        case 2:
            char ch = pop();
            if (ch != '\n')
                printf("\n%c가 삭제되었습니다.", pop());
            break;
        }

        if (num == 3) break;
    }

    return 0;
}

이런 스택 배열은 짜보았는데 여기서 디버그는 잘뜨는데 자료 삭제를 할때 문제가 2개씩 삭제가 됩니다. 근데 이게 왜 잘못되었는지를 모르겠습니다. 삭제가 두개씩 되어서 도와주셧으면 합니다. ㅎㅎ


#스택 배열 #스택 배열로 구현 #스택 배열 연결리스트 장단점 #스택 배열 구현 #스택 배열 자바 #스택 배열 생성 #스택 배열 초기화 #스택 배열 자료구조 #자바 스택 배열 변환 #c언어 스택 배열

profile_image 익명 작성일 -

case 2가 잘못된거 아닐까요?

case 2: char ch = pop(); // 여기서 이미 pop()이 호출되어서 자료가 삭제됨 if (ch != '\n') // 여기서 pop()을 또 호출하면 두번 삭제 // printf("\n%c가 삭제되었습니다.", pop()); printf("\n%c가 삭제되었습니다.", ch); // 삭제된 ch를 %c에 넣어주자 break;

visual studio 2022 exe 파일 관련...

... Visual Studio 2022에서 디버그를 실행할 때 exe 파일이 생성되지 않는 문제는 몇 가지 다양한 이유로 발생할 수 있습니다. 이를 해결하기 위해 다음과 같은 몇 가지 단계를...

Visual Studio 2022 C++ 결과 관련 질문

... Visual Studio 2022에서 C++을 배우고 있다는 말씀이시네요. 이상하게 다른 프로젝트의 결과가 같이 출력되는거죠? 이 문제는 대체로 Build Configuration 때문에 생길...

visual studio 2022 opengl 질문

... // gl 관련 glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT... 예외 상황에서 호출스택 표시해서 스택을 역으로 거슬로...

visual studio 2012 C언어 배열 질문...

... 실행하였을때 스택메모리 19번째 정도 까지 불러서 12345뿐만아니라 dummy값과 쓰래기값들이 출력이되는데 무슨 현상인지 모르겠습니다. vc2012에서 배열의...

visual studio(c++) 데이터 크기? 질문...

... return 0; }[/code] 구조체, 동적할당, double linked list 관련 연습을 하면서... 포인터를 배열로 치환해서 계산할 수는 있지만, student *ptr = new student; 위와 같이...

java studio code 질문입니다.

... Visual Studio Code (VS Code)에서 파일이 실행되지 않는다면... 메시지나 스택 트레이스를 확인할 수 있습니다. 이를... VS Code 및 관련 확장 프로그램 업데이트: VS Code와 관련 확장...