우수 답변
cin.getline ()을 사용하면 에도 공백이 있습니다 . 구문은 다음과 같습니다. cin.getline (문자열 이름, 문자열 크기); 다음 예제를 고려하십시오. str과 strr 모두에 대해 Hello World를 입력한다고 가정합니다. #include
int main()
{
char str[100]", strr[100];
cout<<"Enter the strings : ";
cin.getline( str, 100 ); //enter Hello World
cin>>strr; //enter Hello Word.
cout<
cout<
return 0;
}
이것은 기본적인 차이점입니다. cin은 문자열의 공백을 고려하지 않지만 cin.getline은 고려합니다.
Answer
이것은 학생들이 getline ()을 사용하는 동안 일반적으로 직면하는 가장 일반적인 문제 중 하나입니다. 기능.
프로그램을 실행할 때 Delhi를 입력 한 다음 Enter 키를 누릅니다. 이 Enter 키는 개행 문자 일뿐입니다. 탭 공백 및 \ n과 같은 공백 문자는 일반적으로 cin을 사용하여 값을 입력 할 때 무시됩니다 (건너 뛰기).
일반적으로 입력 스트림에 추가 문자가 입력 된 후 남아 있습니다. 완성 된 것으로 보인다. 그런 다음 의도하지 않은 경우에도 다음 입력 작업으로 전달됩니다. 종종 뒤에 남아있는 개행 문자이지만 다른 문자도 남습니다.
프로그램에서이 개행 문자는 getline () 함수에 대한 입력으로 사용됩니다. 이 함수는 입력을 받았기 때문에 값을 입력 할 수 없습니다.이 문자를 제거하면 프로그램이 완벽하게 작동합니다.
이러한 불필요한 문자를 제거하려면 istream 클래스의 ignore (MAX, DELIM) 멤버 함수가 사용됩니다. 지정된 구분 문자를 포함하여 최대 MAX 개의 문자를 읽고 버립니다. getline () 함수를 다음과 같이 호출하기 전에이 함수를 사용하십시오.
cin.ignore (1, "\ n");
추가 문자에도 공백이 포함될 수 있습니다 (예 : Delhi 를 입력 한 후 공백을 넣은 다음 Enter 키를 누름), 1 대신 10을 사용하는 것이 더 안전합니다.
cin.ignore (10, "\ n");
istream 클래스에 대해 걱정하지 마십시오. IOSTREAM 헤더 파일에 선언되어 있습니다. , getline ()은 istream 클래스 자체의 멤버 함수이기도합니다.