데이터 전에 SCANF에서 캐리지 리턴을 무시합니다… Conio.H를 사용하여 콘솔 기반 그래픽의 레이아웃을 유지하려면
-
20-09-2019 - |
문제
대학 과제를 위해 VC ++ 6에서 Conio.h를 사용한다는 불행이 있습니다.
내 문제는 내 그래픽 설정이 화면 중앙에 있다는 것입니다 ...
예를 들어
gotoxy( getcols()/2, getrows()/2);
printf("Enter something");
scanf( "%d", &something );
이제 누군가가 "무언가"에 들어가기 전에 실수로 들어가면 커서가 다음 줄의 화면 왼쪽으로 재설정됩니다.
IV는 FFLUSH (STDIN) 및 getChar ()로 키보드와 BIOS 버퍼를 플러시하려고 시도했습니다.
모든 도움/아이디어에 감사드립니다, 감사합니다, V
해결책
성공으로가는 길에는 과제가 요구하는 일을하는 것이 포함됩니다. :) 특히 하나 이상의 기능을 사용해야합니다. conio.h
입력을 읽습니다. scanf()
~이다 ~ 아니다 conio.h 기능.
왜냐하면 내가 게으른 이것은 숙제 질문입니다. 나는 당신을 위해 코드를 쓰지 않을 것입니다.
한 가지 가능성은 사용하는 것입니다 cscanf()
보다는 scanf()
. 하지만 이것은 5월 (나는 모르겠다) Echo 입력 문자, 여기에는 우발적으로 포함됩니다. 입력하다, 그리고 당신의 문제를 해결하지 마십시오.
이 경우, 내 전략은 키보드에서 입력 한 캐릭터를 수집하기 위해 루프를 작성하여 비 응집력을 사용하는 것입니다. getch()
기능. 최소한 하나의 인쇄 가능한 캐릭터가있을 때까지 신성을 무시한 다음, 문자를 받아들이고 (캐릭터 배열이나 무엇이든 저장) 신자를 얻을 수 있습니다. 입력 문자가 반향되지 않으므로 커서가 움직이지 않을 것이라고 생각합니다.
그런 다음 입력 버퍼에서 입력 문자를 스캔 할 수 있습니다. sscanf()
. 입력 문자를 계산하여 사용자가 버퍼를 넘치지 않도록하려고합니다. 또한 데이터가 잘못된 경우 일부 오류 처리 일 것입니다.
편집하다: 내가 언급하는 것을 잊어 버린 것 : 버퍼의 마지막 입력 문자 뒤에는 제로 문자가 있어야합니다 ( '\0'
) 그래서 sscanf()
제대로 종료됩니다. 버퍼가 기본적으로 0으로 가득 차있을 수 있지만, 의도적으로 하나를 넣으면 (예 : 최종 Newline을 때릴 때) 코드가 더 정확하고 강력 해집니다.
다른 팁
한 번에 하나의 문자 입력을 읽으십시오. 선행 캐리지 리턴이 감지되면 캐릭터를 무시하고 gotoxy( getcols()/2, (getrows()/2)+1)
적절한 위치에 커서를 다시 배치하려면 다시 코딩합니다 (이전 출력 메시지에 쓰기를 피하기 위해 한 행을 추가).