2010-04-25 4 views
1

C에서 사용자 입력을 요청한 후 지정된 앱이 개행 (​​'\ n')을 작성하지 못하게하려면 어떻게해야합니까? 내가 좋아하는 일을하고 싶습니다 :C에서 입력 한 후 개행이 없습니다.

Type a number 
Number: 3x10 = 30 

은 "X10 = 30"사용자가 ... 문제는 내가 같은 줄에 그것을 할 수 없습니다 (그리고 내가 좋아하는 것입니다 수를 입력 한 후 추가 그것을하기 위해).

아무도 도와 줄 수 있습니까?

답변

1

KillianDS에 따르면 대부분의 터미널은 입력을 자동으로 버퍼링하므로 터미널 인터페이스에 원시/버퍼링되지 않은 입력을 요구해야합니다. 불행히도, 이렇게하는 방법은 대부분의 시스템간에 다를 수 있습니다. UN *의 X 시스템에서

stty 명령을 체크 아웃 (예를 들어, stty raw은 버퍼링 설정하고 stty sane 이전 상태로 돌아가, 이러한 system를 통해 호출 또는 execl 가족 수 있습니다.) termios 인터페이스의 tcsetattr 명령을 사용할 수도 있습니다.

+0

아마도 tcsetattr 함수를 테스트 할 것입니다. 감사합니다. :) – pwseo

2

보통 C에서는 불가능하며 대개는 가능하지도 않습니다. 그 이유는 버퍼링 (buffering)이기 때문에, 입력 스트림은 문자 (일반적으로 엔터)가 프로세서 (예 : scanf, gets, getchar ...)에 데이터를 보내기를 기다립니다. 우선 stdin 자체가 버퍼링됩니다. setvbuf : setvbuf (stdin, NULL, _IONBF, 0)을 사용하여 사용 중지 할 수 있지만 권장하지 않습니다. 이것은 또한 여러분이 백 스페이스와 다른 제어 문자를 직접 처리해야한다는 것을 의미합니다. 추악한 것들 (이것이 얼마나 고통 스러운지 알고 싶다면 얼마 동안은 텔넷을 사용하십시오).

둘째로, C에서 버퍼링을 해제하더라도 입력 할 때까지 버퍼가 사용됩니다. 여기서도 버퍼링을 비활성화하는 시스템 별 방법을 찾을 수는 있지만, 모든 시스템/터미널에 해당하지는 않습니다.

이 레벨에서 출력을 제어하려면 시스템 특정 API 또는 사용자 지정 콘솔을 만들어야합니다.

관련 문제