c++ 문자열 입력시 버퍼에 '엔터키'값이 저장되는 형태에 관한

gyxor의 이미지

#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(라인피드) 만을 의미한다는것에 대한 설명 부탁드립니다.

verena의 이미지

Quote:
첫째질문..
엔터키를 눌러서 버퍼에 0dh 0ah 이런 값들이 들어가게 되고 .. 이런문자들까지 처음부터
다시 읽어 들이는 것은 그 다음 문제라고 하면..
그렇다면 버퍼에 입력이 완료되었다는것을 컴이 알아보는것은 엔터키가 눌려졌을때
키보드버퍼를 채크하는 방식인가요?

네, 보통 문자가 아닌 문자열을 표준입력으로부터 받을 시엔 엔터키를 통해 문자열 입력 종료를 확인합니다.

Quote:
둘째질문..
아무튼 c++ 에서는 어떻게 되는지 궁금해서 위 예제 처럼 해봤더니요..
abc 입력시..
|97|98|99|10| 으로 들어가는것 같더라구요..cin.get() 으로 끄집어 내봤더니 추가로 남은게
10(라인피드) 밖에 없던데요..
c++ 에서는 10라인피드문자만 가지고도 라인피드+케리지리턴의 동작을 할수있기때문에
10문자로 엔터값을 대표해서(엔터기 입력시) 사용하는것인가요?
이러한 구조는 어셈과 같아야한다고 생각하는데요

c++ 에서 엔터키 = 10(라인피드) 만을 의미한다는것에 대한 설명 부탁드립니다.

c++/c에서는 위에서 말씀 드렸듯이 엔터키를 입력한 시점 이전까지의 문자를 일단 해당 버퍼에 넣고, 마지막을 '\0'로 변경합니다.

즉 stdin을 통해 문자열을 입력받을때 엔터키의 역할은 작업종료?를 뜻합니다. 그래서 엔터문자가 들어가는것이 아니라, 마지막을 라인피드로 변경하는 것입니다.

-틀린점 있으면 언제든지 지적해 주세요 ^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.