fgets()를 사용하여 사용자 입력을 얻은 다음 sscanf()를 사용하여 double로 구문 분석합니다. 여기 내 코드 예이다fgets()를 건너 뛰고 사용자 입력을 지우는 방법은 무엇입니까?
int menuItem = 0;
char input[3];
printf("Enter valid menu item"); //values are 1, 2, 3, 4, 5, and -1
fgets(input, sizeof input, stdin);
sscanf(input, "%d", &menuItem);
사용자가 3 자리 입사 (잘못된 입력, 및 I를 적절하게 처리 할) 경우, 에러는,이 자동으로 제 자리 배치하여 내 다음는 fgets()를 생략 발생 다음 입력. 예를 들어, 사용자가 123을 넘어 간다면 이제 다음 fgets를 건너 뛰고 값 3을 입력으로 사용합니다. 이것을 어떻게 지울 수 있습니까? 아니면 최대 1 자릿수까지만 읽을 수 있습니까? (여전히 -1을 처리 할 수 있습니다.)
좋은 생각 - 어쨌든 많은 자릿수를 입력하는 것은 드문 경우라고 생각합니다. 나는 당신이 제안한 것을 할 가능성이 가장 높다고 생각하지만 호기심 때문에 어쨌든 나는 그런 오류를 어떻게 처리 할 것인가? 즉, 내가 [50]을 입력하고 80 문자를 입력한다고 가정 해보십시오. 버퍼에서 여분의 것들을 지우려면 어떻게해야합니까? 그러면 자동으로 다음 fgets()에 배치되지 않습니다. –
'fgets'는 줄 바꿈 문자를 유효한 것으로 취급하기 때문에 문자열에서 그 줄 문자를 기대할 수 있습니다. 따라서 예상되는 문자와 개행 문자, 그리고 NULL 종결자를위한 충분한 공간을 항상 남겨 두어야합니다. 일단 당신이 당신의 가치를 가지고 있다면,'\ n'을 찾으십시오. 그것을 찾지 못하면,'fgets'를 다시 호출하십시오 (그리고 반복하십시오). 최대 문자 수를 읽은 경우에만이 작업을 수행해야합니다. 이것은 특수한 경우 (예 : Ctrl-D) 또는 다른 조기 EOF (파일 또는 파이핑 읽기의 경우)에서 문제를 일으킬 수 있습니다. 개행 문자는 운영 체제마다 다르므로 특별한주의가 필요합니다. – paddy