[C언어] 간단판 파일 입출력 인데요.. 궁금한게 있어서요.. ㅎ_&

yangam의 이미지

#include <stdio.h>

int main()
{
FILE *fp;
int ch;

fp = fopen("document_to_5", "w");
fputs("Help poor children in the World!", fp);
fclose(fp);

fp = fopen("document_to_5", "r");
while ((ch = getc(fp)) != EOF)
putc(ch, stdout);
fclose(fp);

return 0;
}



#include <stdio.h>

int main()
{
	FILE *fp;
	int ch;

	fp = fopen("document_to_5", "w");
	fputs("Help poor children in the World!\n", fp);
	fclose(fp);

	fp = fopen("document_to_5", "r");
	while ((ch = getc(fp)) != EOF)
  	    putc(ch, stdout);
	fclose(fp);

	return 0;
}

두 개의 소스코드에는
서로 다른 곳이 딱 한군데 있습니다.
fputs() 함수에서 마지막에 \n 이 있냐, 없느냐.. 이것인데요.

\n 을 없애면 원하는데로 출력 결과가 나오지 않네요.
\n 을 적어주면 원하는데로 출력 결과가 제대로 나오구요.

분명히 document_to_5 라는 파일에 저장된 내용은 vi로 확인했을 때는
공백이라던지, 다른 것들은 모두 같다고 생각되는데...

음.. 왜 이런 차이점이 생기는건가요?

책에 보니 fputs() 함수는 '\0' 도 추가하지 않고 '\n' 문자도 자동으로 추가하지
않는다고 하던데... 그것 때문에 이렇게 되는건가요?

음.. 알듯하면서도 모르는 그런 가려운 상태여서;;;;
이렇게 질문을 올립니다..

그럼.. 답변 부탁드립니다.
안녕히계세요

sorcerer의 이미지

원하는 결과가 무엇인지 말씀을 해 주셔야 답변하는 사람이 뭐가 옳고 그르다 라는 것을 말 할 수 있지 않을까요?

일단 \n을 넣은 것과 안 넣은 것의 차이는 문자열을 넣고 개행이 되느냐 안 되느냐의 차이입니다. 글쎄요. 그것 말고는 특별히 다른게 없을거 같은데요.

SOrCErEr

맹고이의 이미지

전 둘다 잘 되는데요.
쉘 프롬프트에 가려진 건 아닐지...

yangam의 이미지

원하는 결과는 Help poor children in the World! 라는 문자열이 출력되는 거구요.
바로 위에 분께서 답변주신데로.. 셸 프롬프트에 가려져서 출력이 안된게 맞는 것 같아요;;
지금 한글 입출력으로 콘솔상에서는 '유니콘(?)' 을 쓰고 있거든요.
WOWLINUX 에 기본으로 설치되어있는건데...
음.. 바꾸던지해야겠어요;;
마지막에 \n 같은 걸로 1줄 이상 띄워주지 않으면 이런 일이 발생하네요.
감사합니다..

작은 것들, 사소한 것들을 소중히 여기고,
항상 최선을 다하는 멋진 사람이 되고 싶다.
그들이 나에게 일깨워준 것처럼,
그들 자신이 얼마나 소중한 존재인지 알 수 있도록
도와주는 그런 좋은 사람이 되고 싶다

짱이의 이미지

개행문자를 만나야 버퍼링이 됩니다.

정태영의 이미지

yangam wrote:
원하는 결과는 Help poor children in the World! 라는 문자열이 출력되는 거구요.
바로 위에 분께서 답변주신데로.. 셸 프롬프트에 가려져서 출력이 안된게 맞는 것 같아요;;
지금 한글 입출력으로 콘솔상에서는 '유니콘(?)' 을 쓰고 있거든요.
WOWLINUX 에 기본으로 설치되어있는건데...
음.. 바꾸던지해야겠어요;;
마지막에 \n 같은 걸로 1줄 이상 띄워주지 않으면 이런 일이 발생하네요.
감사합니다..

기본 쉘 프롬프트에 안시같은걸 쓰시는게 아닐지요 ;)

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

맹고이의 이미지

짱이 wrote:
개행문자를 만나야 버퍼링이 됩니다.

라인 버퍼링이든 무엇이든...

프로그램이 종료하면 버퍼를 다 비워줘야 되는 게 아닌가요.

cdecl의 이미지

출력 버퍼를 비울때 ..

1. 개행을 만났을때
2. 입력을 만났을때
3. fflush 류의 버퍼 비우는 함수를 사용 했을때

이렇게 행동을 해야 하지만 windows나 몇몇 플랫폼에선 위의 3개의 조건이 없어도 자동으로 비웁니다.

플랫폼 독립적으로 만드신다면 위의 3가지 조건을 만족하게 만드시면 되지 않을까 생각이 듭니다.

--
cdecl

댓글 달기

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