c언어 스택 문자열 거꾸로 출력 질문합니다

조회수 7173회
#include  < stdio.h>
#include  < stdlib.h>
#include  < string.h>

typedef char element;   

typedef struct stackNode { 
    element data;
    struct stackNode *link;
  }stackNode;

stackNode* top;   

void push(element item)    
{
    stackNode* temp=(stackNode *)malloc(sizeof(stackNode));

temp->data = item;
    temp->link = top;
    top = temp;
}

  element pop()   
{
    element item;
    stackNode* temp=top;

    if(top == NULL) {    
        printf("\n\n Stack is empty !\n");
       return 0;
    }

    else{                    
       item = temp->data;
       top = temp->link;
       free(temp);
       return item;
    }
}

void del()     
{
    stackNode* temp;
    if(top == NULL) {    
       printf("\n\n Stack is empty !\n");
    }

    else {                 
       temp = top;
       top = top->link;
       free(temp);
    }
}

  void printStack()       

 {
        stackNode* p=top;
    printf("\n STACK [ ");
    while(p){
       printf("%c ",p->data);
       p = p->link;
    }
    printf("] ");
  }

int main(void)
  {

    element item[50];
    int i=0;
    top = NULL;

    printf("문자열 입력 : ");

    do
    {
        scanf("%c",&item[i]);
        push(item[i]);
        i++;
        printStack();
    }while(item[i] != '\n');

    printf("end");
  }

문자열을 입력한후에 스택에 넣은후 거꾸로 출력하는 코드입니다. 문자열을 입력한후 엔터를 누르면 do-while 구문이 종료되고 엔드라는 프린트가 나와야하는데 엔터값이 입력이 됩니다 scanf를 getchar로 바꿔도 똑같이 반응하네요이미지

예를 들어 hello를 입력한 후에 엔터를 누르면 사진을 보시는것과 같이 엔터값이 입력되고 end가 나오지않네요 어떡해 해결해야할지 모르겠습니다. 도와주세요!!!

1 답변

  • while을 빠져나가기 위해 문자를 체크하기 전에 인덱스를 늘리기(i++) 때문에 항상 아무것도 없는 값을 볼겁니다. 아래처럼 변경하면 잘 동작할 겁니다.

    int main(void)
      {
    
        element item[50];
        int i=0;
        top = NULL;
    
        printf("문자열 입력 : ");
    
        do
        {
            scanf("%c",&item[i]);
            push(item[i]);
            i++;
            printStack();
          } while(item[i - 1] != '\n');    //바뀐 부분
        printf("end");
      }
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)