C++/Library 2021. 3. 10. 21:11

입력 버퍼 무시하기

  • cin.ignore(_Count, _Metadelim)

  • _Count : 무시할 문자의 최대 개수(바이트)

    • 기본 값은 1

    • 정석대로라면 <limits> 라이브러리의 std::numeric_limits<std::streamsize>::max()를 사용하는게 맞으나... 귀찮으므로 보통 적당히 큰 수를 채택하는 것 같다.

  • _Metadelim : 이 문자가 나올 때까지 무시한다.(해당 문자 포함)

    • 기본 값은 eof
#include <iostream>

int     getInt()
{
  while (true)
  {
    int x;

    std::cout << "Enter an integer number : ";
    std::cin >> x;
    if (std::cin.fail())
    {
      std::cin.clear();
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
      std::cout << "Invalid number, please try again\n";
    }
    else
    {
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
      return (x);
    }
  }
}

char    getOperator()
{
  while (true)
  {
    char op;

    std::cout << "Enter an operator (+, -) : ";
    std::cin >> op;
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    if (op == '+' || op == '-')
      return (op);
    else
      std::cout << "Invalid Operator, please try again" << std::endl;
  }
}

void    printResult(int a, char op, int b)
{
  if (op == '+')      std::cout << a + b << std::endl;
  else if (op == '-') std::cout << a - b << std::endl;
  else                std::cout << "Invalid operator" << std::endl;
}

int     main()
{
  using namespace std;

  int     a = getInt();
  char    op = getOperator();
  int     b = getInt();

  printResult(a, op, b);
}

'C++ > Library' 카테고리의 다른 글

C++ cin.ignore  (0) 2021.03.11
C++ cin  (0) 2021.03.11
C++ 난수 생성 (Random Number Generation)  (0) 2021.03.11
C++ typeinfo  (0) 2021.03.10
C++ 출력 버퍼 비우기  (0) 2021.03.10