Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 cin.ignore()의 용도는 무엇입니까?

<시간/>

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