반응형

뭔가 이해가 될 것 같으면서도 햇갈리게 하는 이 함수들 -_-;;;
우선 일반적으로... 이론적인 것과 간단예제는 아래와 같이...

1. cin : 여백을 제외한 문자 또는 문자열을 저장
char a, b;
cin >> a;
cin >> b;
cout << a << b;
-> a엔터, b엔터, a와b 다 출력
-> 공백,개행은 무시하며 개행은 종료하면서 남겨둠, 이후 get이나 getline 사용시 개행을 만나버려서 종료됨.

char *a = new char[];
cin >> a;
cout << a;
-> this a엔터, this 만 출력


2. get() : 여백까지 다 저장(단위별)
char a;
char *b = new char[20];
a = cin.get();
cin.get(b,20);
-> a입력후 엔터 하면, a 만 출력
-> 개행도 입력으로 간주. b에는 엔터가 들어감
-> 공백은 저장하지만, 개행은 종료하면서 남겨둠. cin.get(); 이후 get이나 getline 사용시 개행을 만나버려서 종료됨.

3. getline(변수주소, 길이, 종결문자) : 여백까지 저장(문자열로), 개행문자는 null로 저장.
char a[10];
cin.getline(a,10);
cout << a;
-> this a엔터, this a 출력
-> 공백은 저장하며, 개행은 종료하면서 null로 바꿔놈. 이후 get이나 getline 바로 사용시 바로 사용 가능.

cin.getline(a,10,i);
cout << a;
-> this a엔터, th만 출력됨. 종결문자 만나서

진짜 차이점은 뭘까? 느낀점을 생각나는데로 정리하면

사용방식에 따라..
- cin은 문자,문자열 다 사용가능
- get은 문자,문자열 다 사용가능하나, 문자일때는 리턴형, 
   문자열일땐 인자값취해주는 식으로 사용
- get은 문자는 모르겠는데, 여튼 문자열 전용으로 사용

또.....
개행문자 입력시.. 모두 저장을 끝내는 것은 똑같은데 다만....
- cin 입력후 엔터시, 다음 get이나 getline은 개행문자를 저장하면서 오작동
- get 입력후 엔터시, 다음 get이나 getline은 개행문자를 저장하면서 오작동
- getline 입력후 엔터시, 개행문자를 null로 바꿔저장하면서
   다음 get이나 getline이 정상 작동

그럼....
getline만 쓸 수는 없으니까, 오작동을 안으키려면??
- cin이나 get 이후에
- cin.get();
- cin.ignore();
- 을 넣어서... 개행문자를 바로 안만나게 하면된다.




혹여 보시는 분들중 의문점이나 지적있으시면 댓글 감사하겠습니다.

반응형
Posted by Rainfly
l