포인터배열을 이용하여 큐 구현을 하려고 합니다.
글쓴이: wildwide / 작성시간: 수, 2012/03/21 - 7:10오전
안녕하세요. C언어를 공부하고 있는 사람입니다.
질문이 좀 많습니다. 죄송합니다.
현재 큐소스를 이용한 계산기 프로그램을 만들고 있는 데
지금 풀어야 할 부분은 계산식을 따로 저장해 두었다가
계산이 끝난 후 계산식과 답을 출력해야 하는 부분입니다.
결과물)
계산식을 1*2처럼 입력하고 엔터키를 치세요.
아무것도 입력하지 않으면 계산이 종료됩니다.
계산식 : 4*5 (엔터)
4*5=20
계산식 5*5 (엔터)
5*5=25
(엔터)
4*5=20
5*5=25
이렇게 나와야 합니다.
그래서 아래와 같이 gets(buff)로 문자열을 입력 받고,
포인터배열변수에 저장을 하려고 합니다.
예)
q.rear=0;
pstr[q.rear++]=buff;
이렇게 했을 경우
printf("%sn",pstr[0]);
이 값이 계속해서 변하고 있습니다.
제가 원하는 건 pstr[0]="4*5",pst[1]=5*5.... 이렇게 저장하는 것입니다.
제가 뭘 잘못했을까요?
도움이 필요합니다. 아직 배우는 중이라 질문이 좀 난해 하실 텐데 부탁드립니다.
#include<stdio.h> #include<string.h> #include<stdlib.h> int Q_push(char *buff, int value); char *pstr[10]; char *pstr2[10]; #define QUEUE_MAX 10 typedef struct tagQueue { char array[QUEUE_MAX]; int front; int rear; int tail; int head; char mun[QUEUE_MAX]; } QUEUE; QUEUE q; int main(void) { char buff[10],tmp[10]; char *op="+-*/%"; int index; int value1=0, value2=0; q.front = q.rear =0; puts("계산식을 1*2처럼 입력하고 엔터키를 치세요."); puts("아무것도 입력하지 않으면 계산이 종료됩니다."); for(;;) { printf("계산식 :"); gets(buff); if(strlen(buff)==0) break; if(Q_push(buff,value1)==-1) { puts("더 이상 추가할 수 없습니다."); } } value1=0; for(;;) { if(Q_pop(&value2)==-1)break; value1 += value2; } } int Q_push(char *buff, int value) { if(q.rear==QUEUE_MAX)return -1; pstr[q.rear]=buff; printf("p=%s\n",*pstr); printf("p1=%s\n",*(pstr+1)); printf("p2=%s\n",*(pstr+2)); q.array[q.rear++]=value; return 0; } int Q_pop(int *value) { if(q.front==q.rear||q.front==QUEUE_MAX) return-1; *value=q.array[q.front++]; return 0; }
$ ./queue-2.exe
계산식을 1*2처럼 입력하고 엔터키를 치세요.
아무것도 입력하지 않으면 계산이 종료됩니다.
계산식 :3+3
p=3+3
p1=(null)
p2=(null)
계산식 :4+4
p=4+4
p1=4+4
p2=(null)
계산식 :5+5
p=5+5
p1=5+5
p2=5+5
계산식 :
Forums:
댓글 달기