2014-12-25 3 views
4

글쎄, 나는 리눅스 터미널에서 사용되는 C++로 채팅을 쓰고있다. 나는 타이핑하는 동안조차도 메시지를 받고 싶다. 기본적으로 non-blocking cin입니다. 나는 스레드를 만들어서이 작업을 할 수있었습니다. 하지만 문제는 수신 메시지와 타이핑이 병합된다는 것입니다.C++ : 시동 동안

cout에서 오는 다른 줄의 줄을 cin 줄로 구분할 수 있습니까?

영어로 죄송합니다.

+1

a) (동기화되지 않은) 스레드를 사용하지 마십시오. b) 콘솔의 나머지 부분이 출력 부분 인 동안 입력 "라인"은 어떻습니까? 커서 위치 등을 설정하기 위해 NCurses가 도움을 줄 것입니다. – deviantfan

+2

다음과 같은 내용을보실 수 있습니다 : https://en.wikipedia.org/wiki/Ncurses – Galik

+1

짧은 대답 :'cin'과'cout'은 대화 형 입력에 적합하지 않습니다, 그들은 읽기/쓰기 용입니다 ~ 스트림 *, 사용자가 아닙니다. 따라서 대화 형 사용자 입력을위한 라이브러리 인 ncurses와 같은 것을 사용하도록 권장합니다. –

답변

5

cout에서 오는 다른 줄의 줄을 cin 줄로 구분할 수 있습니까?

네, 콘솔에 에코를 사용하지 않도록 설정하고 입력 할 때 최종 사용자가 입력 한 문자를 인쇄해야합니다. 메시지가 수신을 감지하면

, 당신은이 세 가지를 수행해야 최종 사용자가 지금까지

  • 인쇄 수신 메시지 입력 한

    • 지우기 아웃 라인에 모든 문자를
    • 지금까지 입력 된 문자를 다음 행에 인쇄하십시오.

    최종 결과는 다음과 같습니다

    Friend: How are you?      <== This is your friend's prior message 
    You: > I am fi        <== This is the text you've entered so far 
    

    를 다음 메시지가 오면 입력을 완료하기 전에 다음과 같이 마지막 라인을 다시 정리하면 :

    Friend: How are you?      <== This is your friend's prior message 
    Friend: Are you coming to school tomorrow? <== This is the new line that came in as the user was typing 
    You: > I am fi        <== This is the text you've entered so far, re-printed again 
    
  • +0

    지금까지, 이것이 최고의 대답이었습니다. 이해하는데 도움이되었습니다. 고맙습니다! – Ikbel

    3

    내 아이디어는 불완전 클라이언트의 메시지 (아직 보내지 않은 메시지)를 변수에 저장하는 것으로, 프로그램이 들어오는 메시지를 받으면 클라이언트의 메시지를 백 스페이스로 지우고 들어오는 메시지를 작성한 다음 클라이언트의 불완전한 메시지를 다시 작성해야합니다 ge.

    나는 그것을 체크하지 않았다.