데이터 전에 SCANF에서 캐리지 리턴을 무시합니다… Conio.H를 사용하여 콘솔 기반 그래픽의 레이아웃을 유지하려면

StackOverflow https://stackoverflow.com/questions/2450340

문제

대학 과제를 위해 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) 적절한 위치에 커서를 다시 배치하려면 다시 코딩합니다 (이전 출력 메시지에 쓰기를 피하기 위해 한 행을 추가).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top