cin.ignore() 함수는 입력 버퍼에서 하나 이상의 문자를 무시하거나 지우는 데 사용됩니다.
ignore()에 대한 아이디어를 얻으려면 한 가지 문제를 확인해야 하며 그 솔루션은 ignore() 함수를 사용하여 찾을 수 있습니다. 문제는 아래와 같습니다.
때로는 원치 않는 버퍼를 지워야 하므로 다음 입력이 수신되면 원하는 컨테이너에 저장하지만 이전 변수의 버퍼에는 저장하지 않습니다. 예를 들어, cin 문을 입력한 후 문자 배열이나 문자열을 입력해야 합니다. 따라서 입력 버퍼를 지워야 합니다. 그렇지 않으면 이전 변수의 버퍼를 차지하게 됩니다. 첫 번째 입력 후 "Enter" 키를 누르면 이전 변수의 버퍼에 새 데이터를 저장할 공간이 있으므로 프로그램은 컨테이너의 다음 입력을 건너뜁니다.
예시
#include<iostream> #include<vector> using namespace std; main() { int x; char str[80]; cout << "Enter a number and a string:\n"; cin >> x; cin.getline(str,80); //take a string cout << "You have entered:\n"; cout << x << endl; cout << str << endl; }
출력
Enter a number and a string: 8 You have entered: 8
정수와 문자열에 대해 두 개의 cin 문이 있지만 숫자만 사용합니다. Enter 키를 누르면 입력 없이 getLine() 함수를 건너뜁니다. 때로는 입력을 받을 수 있지만 정수 변수의 버퍼 내부에 있으므로 문자열을 출력으로 볼 수 없습니다.
이제 이 문제를 해결하기 위해 cin.ignore() 함수를 사용할 것입니다. 이 기능은 주어진 범위까지 입력을 무시하는 데 사용됩니다. 다음과 같이 문장을 작성하면 -
cin.ignore(numeric_limits::max(), ‘\n’)
그런 다음 줄 바꿈 문자도 포함하여 입력을 무시합니다.
예시
#include<iostream> #include<ios> //used to get stream size #include<limits> //used to get numeric limits using namespace std; main() { int x; char str[80]; cout << "Enter a number and a string:\n"; cin >> x; cin.ignore(numeric_limits<streamsize>::max(), '\n'); //clear buffer before taking new line cin.getline(str,80); //take a string cout << "You have entered:\n"; cout << x << endl; cout << str << endl; }
출력
Enter a number and a string: 4 Hello World You have entered: 4 Hello World