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; 실행되고
다시 메뉴출력으로 안가고 입력을 기다리는 듯함, 엔터 누르면 메뉴 출력으로 이동
-----------------------------------------------------------------------------------
그래서 결국 질문은
(1)while(getchar()!='
';)
(2)fflush(stdin);
(3)cin.clear();
위에 세 함수 전부 입력 버퍼 비우는 거라고 알고 있는데, 뭔가 조금씩 다른가봐요
위 세함수가 어떻게 비우는지? 동작원리나 차이점 알려주실수 있을까요.
2번 극혐 - DCW
2번이 왜극혐 2번도 표준이다 1번은 입력버퍼에껄 읽어오니까 비어있으면 당연히 입력요구함 그니까 2번 써라 어떤 책에서 2번 표준아니라고 하는데 그건 옛날얘기가 됬다 표준된지 오래됨
2번은 비어있으면 걍 넘어간다 따로 입력요구안하고
쇼쇼 // 개소리 하고 앉아 있네. fflush(stdin); 은 지금도 비표준이다. stream이라는 개념, 그리고 stream에서 flush라는 동작의 개념이 뭐하는 건지 몰라서 그런 소리하는 거냐? 입력에 대해서 flush한다는 거 자체가 일단 개소리다. 표준된지 오래되었다고? 그럼 왜 gcc에서는 아직도 안되냐? 소설 쓰지 마라 소설가 새끼야.
그리고 cin.clear();는 입력 버퍼 비우는 게 아님. 입력 오류가 발생했을 때 error flag를 초기화시키는 역할 밖에 안해. 이름에 속지마. 1번 코드도 좀 이상하네. while(getchar() != '\n'); 이렇게 해야지. while(getchar() != '\n'); 로 해라. 이게 제일 나은 방법이다.
'n'이 아니라 '\\n'. 아 디씨에서 덧글에 \\ 쓰면 필터링돼서 없어지는 거 극혐.