프로그래밍

 3204, 1/161 회원가입  로그인  
   leebk1124
   c언어 segmentation fault:11 오류 질문드립니다!

http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_programming&no=6628 [복사]


#include <stdio.h>
#include <ctype.h>
#define STACK_SIZE 100

char token_stack[STACK_SIZE];
int token_top = -1;
void infix_to_postfix();
int precedence(char op);
void push_token(char sym);
char pop_token();
void print_stack();
int is_empty();
double cal_postfix(char expr[]);

int main()
{
    infix_to_postfix();
}

void infix_to_postfix()
{
    char expr[100], sym, token, postfix[100];
    int cnt = 0;
    int pos = 0;
    int i = 0;

    printf("Enter the expression :: ");
    scanf("%s", expr);

    for(int i = 0; expr[i] != '\0'; i++) {
        printf("%c", expr[i]);
    }

    while ((token = expr[pos++]) != '\0')
    {
        if(token >= '0' && token <= '9') {
            do{
                postfix[cnt++] = token;
            }while((token >= '0' && token <= '9'));
            
            postfix[cnt++] = ' ';
            //print_stack();
        }
        
        else if(token == '(') {
            push_token(token);
            //print_stack();
        }

        else if(token == ')') {
            while((sym = pop_token()) != '(') {
                postfix[cnt++] = sym;
                postfix[cnt++] = ' ';
            }
           // print_stack();
        }

        else
        {
            while (precedence(token_stack[token_top]) >= precedence(token) && token_top != -1) {
                postfix[cnt++] = pop_token();
                postfix[cnt++] = ' ';
            }
            push_token(token);
            
            //print_stack();
        }
        

        //else
        //    pos++;
    }

    while (token_top >= 0)
    {
        postfix[cnt++] = pop_token();
        postfix[cnt++] = ' ';
       // print_stack();
    }
    //print_stack();

    
    postfix[cnt] = '\0';

    //while(postfix[i++] != '\0') {
    //    printf("%c\n", postfix[i]);
    //}

    //cal_postfix(postfix);

}

int precedence(char op)
{
    if (op == '(')
        return 0;
    if (op == '+' || op == '-')
        return 1;
    if (op == '*' || op == '/' || op == '%')
        return 2;
    else
        return ' ';
}

void push_token(char sym)
{
    if (token_top < STACK_SIZE -1) {
        token_stack[token_top] = sym;
        token_top++;
    }
    else
        printf("token stack full\n");
}

char pop_token()
{
    if (token_top >= 0)
        return token_stack[token_top--];

    printf("token stack empty\n");
    return ' ';
}

void print_stack()
{
    if(!is_empty()) {
        for(int i = 0; i <= token_top; i++) {
            printf("%c", token_stack[i]);
        }
        printf("\n");
    }
}

int is_empty() {
    if(token_top == -1) {
        printf("Stack is empty.\n");
        return 1;
    }
    return 0;
}

double cal_postfix(char expr[])
{
    char pos;
    double val0, val1, val2;
    int i = 0;

    while(expr[i] != '\0')
    {
        pos = expr[i++];

        if(pos >= '0' && pos <= '9')
        {
            val0 = pos - '0';
            push_token(val0);
        }

        else if(pos == '+' || pos == '-' || pos == '*' || pos == '/')
        {
            val2 = pop_token();
            val1 = pop_token();

            switch(pos)
            {
                case '+' : push_token(val1 + val2); break;
                case '-' : push_token(val1 - val2); break;
                case '*' : push_token(val1 * val2); break;
                case '/' : push_token(val1 / val2); break;
            }
        }
    }
    return pop_token();
}


infix를 postfix로 바꾸고 계산을 하는 프로그램입니다.
그런데 간단하게 24+3만 입력해도 segmentatino fault오류가 발생합니다.
배열을 입력받은 후 printf문도 실행이 되지 않습니다.
어디서 문제가 발생한건지 도저히 못찾겠어서 질문드립니다. 감사합니다!

  Hit : 92     Date : 2021/05/21 01:03
[불법/스팸글로 신고하기]



    
cd80 입력후 바로나오는 printf는 \n이 없어서 flush가 되지 않아서 출력이 안되는거구요
크래쉬 나는거는
if(token >= '0' && token <= '9') {
do{
postfix[cnt++] = token;
}while((token >= '0' && token <= '9'));
여기서 무한루프를 돌아서 크래쉬가 발생합니다
2021/05/21  
leebk1124 와 헐 그러네요!! 정말 감사합니다!! 2021/05/22  
  c언어 segmentation fault:11 오류 질문드립니다![2]     leebk1124
05/21 91
3203   C++함수관련 질문이에용!![2]     1999dylee
05/11 118
3202   파이썬 지문 드립니다.[1]     kksh1107
04/24 155
3201   리버싱의 세번쨰 꽃 - 역랑-     nninni79
04/20 228
3200   어셈블리어에 관한 질문입니다.[3]     p0wermilk
03/31 292
3199   달고나 문서 쉘코드[1]     ghjk645
03/24 254
3198 비밀글입니다  c언어 소수 값     adwefq
04/29 0
3197   C언어 소스질문입니다![4]     an0088
01/05 1477
3196   C++ /// 빌드 에러 ㅠㅠ     guichanta
08/23 962
3195 비밀글입니다  c언어 도와주세요ㅠㅠ     su6339
04/06 0
3194   해킹을 배우려고하는데[3]     zoodem04
03/26 2464
3193   c언어를 배우고싶어요 ![7]     dwc07238
02/11 1746
3192   스택이 쌓이는 방향에 관해서!![1]     hackxx123
12/10 1331
3191   해킹툴에서 ip 없이 하드에 심는거에는 어떤게 있을까요?[2]     aowlrgmlals
11/27 1494
3190   C언어 하는데 double 실수를 넣은데 자꾸 0.0이 나와요[2]     fatou10336
11/20 1348
3189   dumpcode.h 이해좀 도와주세요 .[1]     cm6418
11/06 1163
3188   c언어 알고리즘 질문입니다.[3]     alstn8150
10/12 1407
3187     [re] c언어 알고리즘 질문입니다.     dafher
05/13 557
3186   c언어 소스 질문 뭐가 문제인지ㅜㅜㅜㅜ[2]     sjjh96
05/23 2434
3185   파이썬 클래스 공부중 질문[1]     wnsdud5534
04/12 1332
1 [2][3][4][5][6][7][8][9][10]..[161]

Copyright 1999-2021 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com