c++ 문자열 입력시 버퍼에 '엔터키'값이 저장되는 형태에 관한
#include<iostream> #include<cstring> using namespace std; int main() { char data[10]; char ch; cin.get(data,10); ch = cin.get(); cout << "a"; cout << ch; cout << "b"; ch = cin.get(); cout << ch; return 0; }
어셈블리어를 공부하다보니까..
문자열 입력시에 [엔터키]의 경우 누르면 0dh(캐리지리턴) 0ah(라인피드) 로.. 순서대로
입력시킨다는것을 알게 되었습니다.
첫째질문..
엔터키를 눌러서 버퍼에 0dh 0ah 이런 값들이 들어가게 되고 .. 이런문자들까지 처음부터
다시 읽어 들이는 것은 그 다음 문제라고 하면..
그렇다면 버퍼에 입력이 완료되었다는것을 컴이 알아보는것은 엔터키가 눌려졌을때
키보드버퍼를 채크하는 방식인가요?
내용으로 와서..
아직 확실친 않지만 어셈에서는 엔터를 치면 0dh 0ah 이런 2개의 문자가 버퍼내로 들어가게
되는데요
abc를 입력하면
|97|98|99|13|10| 이런식으로 5개의 아스키값이 들어가는데요 그래서 총 문자열 길이는 5가되구요
머,,사실 마지막 10(라인피드)는 확실히 모르겠습니다.
버퍼에서 끄집어 내서 출력해본것은 아니니까요.. 글자길이는 확실합니다.
둘째질문..
아무튼 c++ 에서는 어떻게 되는지 궁금해서 위 예제 처럼 해봤더니요..
abc 입력시..
|97|98|99|10| 으로 들어가는것 같더라구요..cin.get() 으로 끄집어 내봤더니 추가로 남은게
10(라인피드) 밖에 없던데요..
c++ 에서는 10라인피드문자만 가지고도 라인피드+케리지리턴의 동작을 할수있기때문에
10문자로 엔터값을 대표해서(엔터기 입력시) 사용하는것인가요?
이러한 구조는 어셈과 같아야한다고 생각하는데요
c++ 에서 엔터키 = 10(라인피드) 만을 의미한다는것에 대한 설명 부탁드립니다.
Re: c++ 문자열 입력시 버퍼에 '엔터키'값이 저장되는 형태에 관
네, 보통 문자가 아닌 문자열을 표준입력으로부터 받을 시엔 엔터키를 통해 문자열 입력 종료를 확인합니다.
c++/c에서는 위에서 말씀 드렸듯이 엔터키를 입력한 시점 이전까지의 문자를 일단 해당 버퍼에 넣고, 마지막을 '\0'로 변경합니다.
즉 stdin을 통해 문자열을 입력받을때 엔터키의 역할은 작업종료?를 뜻합니다. 그래서 엔터문자가 들어가는것이 아니라, 마지막을 라인피드로 변경하는 것입니다.
-틀린점 있으면 언제든지 지적해 주세요 ^^
댓글 달기