lcs5382   6년 전

원래는 stack.h / stack.cpp / main.cpp로 모듈화하여 가독성이 좋았으나

제출을 하기 위해서 모두 main.cpp에 모으다보니 코드길이가 길어진 점 이해바랍니다 ㅠㅠ


제가 궁금한점은 다음과 같습니다.

main함수내 31~35번 라인을 한번 봐주세요~


원래는 for문을 N번만 실행하려했으나 

31번 라인에서 cin>>N을 실행한 후 33번 라인을 무시하더라고요...(여기가 궁금한점!!)

그런데 두번째 차례의 for문에서는 getline을 인식했습니다. 그래서

34번 라인의 if( i != 0 )구문을 추가하여 첫번째 차례의 for문만 스택명령어를 인식하지 못하게 했고

그다음부터는 인식하도록 구현하였습니다.


질문!!!

Q) 왜 cin>>N을 실행한후 곧바로 getline함수를 실행하면 무시를 하게되는 걸까요?

저는 처음에 개행문자(\n)가 들어간다고 생각해서 cin.clear()함수를 추가했지만 

여전히 첫번째 차례의 for문에서 getline함수를 무시하더라고요... 


고수님들 도와주세요~~

startlink   6년 전

Q)에 답을 써주셨네요.

startlink   6년 전

cin.ignore() 를 해야할 것 같아요

kkw564   6년 전

void solve(stack* st, string command);

int main() {
int N;
string command;
stack st;
cin >> N;
getchar(); // <<<<<<<<< 개행은 getchar로 빼니 되네요
for (int i = 0; i <= N; i++) {
getline(cin, command);
if (i != 0)
solve(&st, command);
}
return 0;
}


그리고 여담으로 getline가 아닌 string cmd; int val; 이후 cin >> cmd >> val; 로 받으면 더 쉽지않을까요..?

lcs5382   6년 전

와 두분 모두 감사합니다~

이렇게 질문을 통해서 새로운 방식을 배워갑니다^^

lcs5382   6년 전

kkw564님께서 알려주신 방법대로 구현한 소스추가합니다. solve함수가 더 간단해졌네요!

댓글을 작성하려면 로그인해야 합니다.