void ClearStdin(void)
{

  (1)while(getchar()!=' ';)
  (2)fflush(stdin);
  (3)cin.clear();
}

int main(void)
{
 int opt, len = 0, maxLen = 10;
 Account * accountArr[100];
 while (1)
 {
  opt = 0;
  ShowMenu();
  cout << "선택> ", cin >> opt;
  ClearStdin();
  if (opt < 1 || opt>5)
  {
   cout << "1~5의 숫자를 입력해 주세요." << endl;
   ClearStdin();
   continue;
  }



.........



위 코드에서 opt에 입력받을때 adsde이렇게 막 영문자 입력하면


[void ClearStdin(void)에 (1)while(getchar()!=' ';)만 있을때]

or [void ClearStdin(void)에 (2)fflush(stdin);만 있을때]

or [void ClearStdin(void)에 (3)cin.clear();만 있을때]


입력 버퍼가 아예 안비워 지는지 cout << "1~5의 숫자를 입력해 주세요." << endl;  실행되고


메뉴 출력하고 선택 지나쳐서 다시 cout << "1~5의 숫자를 입력해 주세요." << endl; 여기로 돌아오고 무한반복~


[void ClearStdin(void)에 (1)while(getchar()!=' ';)과 (3)cin.clear();이 있을때]


입력 버퍼가 비워는 지는데 cout << "1~5의 숫자를 입력해 주세요." << endl;  실행되고



다시 메뉴출력으로 안가고 입력을 기다리는 듯함, 엔터 누르면 메뉴 출력으로 이동


[void ClearStdin(void)에(2)fflush(stdin);과 (3)cin.clear();이 있을때]

이게 가장 이상적인거같은데 cout << "1~5의 숫자를 입력해 주세요." << endl;  실행되고,

메뉴 출력하고 opt 입력받는 위치로 이동


-----------------------------------------------------------------------------------


그래서 결국 질문은


  (1)while(getchar()!=' ';)
  (2)fflush(stdin);
  (3)cin.clear();


위에 세 함수 전부 입력 버퍼 비우는 거라고 알고 있는데, 뭔가 조금씩 다른가봐요


위 세함수가 어떻게 비우는지? 동작원리나 차이점 알려주실수 있을까요.