본문 바로가기

C++ Programming/이것이 C++이다

cin, get, getline 차이점

1. cin

cin은 문자와 문자열 모두 입력받을 수 있습니다.

예를들면요,

#include <iostream.h>

void main()

{

char a; //문자변수 선언

cin>>a; //문자입력 받음

cout<<a; //입력했던 문자 출력

}

 


또 다른 예는요,

#include <iostream.h>
void main()
{
char a,b;
cin>>a;

cin>>b;
cout<<a<<" "<<b;
}

이 예의 결과는요,

t입력 후 엔터

y입력 후 엔터

결과=> t y 출력

변수 a에는 t, 변수 b에는 y가 입력되기 때문입니다.



또 다른 예는요,

#include <iostream.h>

void main()

{

char a[10]; //char형 배열 선언

cin>>a; //문자열 입력 받음

cout<<a; //입력했던 문자열 출력

}

이 예의 결과는요,

this is 입력 후 엔터

결과=> this



2. get()

get()은 문자만 입력받을 수 있습니다.

예를들면,

#include <iostream.h>

void main()

{

char a;

a=cin.get(); //a에 입력한 문자 저장

cout<<a;

}



#include <iostream.h>

void main()

{

char a,b;

a=cin.get();
b=cin.get();

b=cin.get();

cout<<a<<" "<<b << " " << c;

}

이 예의 결과는요,

t입력 후 엔터, k입력후 엔터

<결과>

t

k

 

 

즉 t +Enter(new line:개행) + k입니다.

이것이 cin과의 차이점입니다.

 

앞에서 cin은 엔터가 나오면 입력종료로 간주했지만, get은 엔터도 입력받을 문자로 간주합니다.

 

따라서 변수a에는 t가, 변수b에는 엔터가 c에는 k가 입력됩니다.

 

또는

cin.get(a);
cin.get(b);
cin.get(c);

로 하였을 경우 다음과 같이 입력 하면

Q R

a에는 Q가, b에는 빈칸이, c에는 R이 저장됩니다.

 


3. cin.getline()

getline()은 문자열만 입력받습니다.

getline(변수의 주소,최대입력가능 문자수,종결문자);

이렇게 사용하고요, 종결문자 생략시는 엔터로 간주됩니다.

 

그리고 종결문자를 Null문자로 바꿉니다. 따라서 종결문자전까지 출력을 하게 됩니다.

 

게다가 최대입력가능 문자수보다 많은 문자를 입력한 경우 n-1개만큼만 받아들이고 n번째 문자는

 

null문자로 합니다.

 

예를들면,

#include <iostream.h>

void main()

{

char a[10];
cin.getline(a,10);
cout<<a;

}

이 예의 결과는요,

this is 입력 후 엔터

결과=>this is

이것은 위의 cin의 결과와 차이점 입니다. cin은 공백을 만나면 입력이 끝난 줄 알지만 getline은 공백(아스키코드 32)도 문자로서 받아들입니다.



또 다른 예는요,

#include <iostream.h>

void main()

{

char a[10];

cin.getline(a,10,'i');

cout<<a;

}

이 예의 출력결과는,

this 입력 후 엔터

결과=> th 출력

 

게다가 getline은 두가지 형태가 있습니다.

 

하나는 cin.getline()형태와 getline()의 형태가 그것인데,

 

cin.getlin같은 경우는 앞에서 설명을 했고, 주목을 해야 할 것이 getline()입니다.

 

우선 getline의 기본 형태는 getline(cin,저장할주소)입니다.

 

여기서 주의해야 할 것은 getline()은 저장할주소가 반드시 string형 변수(char배열이 아닙니다.)

 

이어야 한다는 겁니다.

 

이상하게도 getline()같은 경우에는 엔터를 두번 쳐 주어야만 하는 이상한 양향을 띄는데,

 

이에 대해서 알고 있는 사람은 정확하게 없는 것 같습니다.

 

조사를 해 본 결과 보통은 개행문자(enter)를 만나면 그걸 null문자롤 만들기 때문에 한번 더

 

쳐 주어야 한다고 하더군요. 물론 정확하진 않습니다. 조사가 되는 대로 올리도록 하죠.

 

getline()을 사용하는 경우 입력하는 cmd창이 무척이나 지저분해집니다.

 

보통은 cin.getline()을 사용하는게 좋을 것 같습니다.