캐리지 리턴 값 찾아내기...

buildkdom의 이미지

C 언어에서 분명
\r 값이 캐리지 리턴을 의미하잖아요?

char c;   //이렇게 선언한 후.. 나중에




while(  (c=getc(파일 스트림)) != EOF  )
{
	if(c == '\r')//캐리지 리턴 값이 보이면 하고 싶은게 있어서...
                { ....}
}

로 도저히 찾아내질 못하네요

\r 대신에 \n 찾을 땐 귀신같이 찾는데 말이져...

kslee80의 이미지

getc() 에서 읽어 들이는 값에 Carriage Return 이 없을수도 있죠.

CR 이 없을수도 있다는 가정을 해 보시고..
실제로 읽어들이는 파일을 hex dump 해 봐서 CR 값을 수동으로
찾아봐야겠죠.

참고적으로...
읽어들이는 파일이 Text 파일일때에는 CR 이 있을수도 있고 없을수도 있습니다.
무슨 의미냐 하면,
Windows 환경에서 만들어진 Text 파일이라면 CR 이 존재하겠지만,
Unix/Linux 환경에서 만들어진 Text 파일이라면 CR 이 없을것입니다.

왜냐하면,
Windows 환경에서 NewLine 문자는 <CR><LF> 의 2Byte 로 이루어지며,
Unix/Linux 환경에서의 NewLine 문자는 <LF> 한 문자로 이루어집니다.

buildkdom의 이미지

님 말씀대로 Text파일을 읽는 중이었는데
Window상이라 <CR><LF>모두 존재합니다.
0D 0A값으로 말이죠~(Hex값으로 존재하고 있습니다)

Visual C++을 사용하고 있는데요
getc()로는 찾을 수가 없네요(제가 해본 실험에 의하면..)

야.. 이거 빨리 해결해야 되는디.. ㅎ :shock:

아~ 한가지 팁은요,
Visual C++에서만 이렇게 되는 지는 모르겠는데,

putc('/n',파일 스트림);//이렇게 하면 <CR><LF>값이 모두 들어간답니다. 요상하네요^^

서지훈의 이미지

Windos or Dos 환경에서는 newline(/n) = CR + LF 같은 것이 됩니다.
그러니 getc()로 enter 입력을 받으면 newline을 받은 것과 같은 역활을 합니다.
그리고 getc()로는 이러한 것을 잡아 낼 수가 없구요.
그냥 '/n' 이 입력되면은 그 놈이 있는것과 같습니다.
참고 하시길...

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

익명 사용자의 이미지

\r 과 \n 둘다 판단하시는게 맞을듯 합니다.

파일상에서 개행문자를 보면 \n 이 맞을겁니다.

하지만 키보드로 입력 받을때는 \r 이 맞을겁니다.

하지만 윈도우에서는 \n -> \r\n으로 확장이 되죠.

차라리 \r 과 \n 을 둘다 판단하여 이러한 차이를 극복해보심이 좋을듯 합니다.

전웅의 이미지

서지훈 wrote:
Windos or Dos 환경에서는 newline(/n) = CR + LF 같은 것이 됩니다.
그러니 getc()로 enter 입력을 받으면 newline을 받은 것과 같은 역활을 합니다.
그리고 getc()로는 이러한 것을 잡아 낼 수가 없구요.
그냥 '/n' 이 입력되면은 그 놈이 있는것과 같습니다.
참고 하시길..

맞습니다. 보다 자세한 이야기는 다음을 참고하시기 바랍니다 - 제가 다양
한 환경에서의 예도 인용해 두었습니다.

http://groups.google.com/groups?threadm=ba78f4%243f6%241%40news.hananet.net&rnum=5&prev=/groups%3Fq%3DMac%2Bgroup:han.comp.lang.c%26hl%3Dko%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26group%3Dhan.comp.lang.c%26selm%3Dba78f4%25243f6%25241%2540news.hananet.net%26rnum%3D5

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

buildkdom의 이미지

와~ 자세한 설명 정말 감사합니다.

다음에 이런 부분 나오면 다신 어렵지 않겠군요 :D

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.