fscanf 질문입니다.

익명 사용자의 이미지

제가 스트림에 대한 지식이 별루 없어서.. ^^;;

하여간..

말그대로 fscanf에 대한 질문인데요..
fopen으로 파일을 입력 받아서 이 내용을 데이타로 쓰고 있는데요..
파일 내용은
수,수,수
이렇게 되어있습니다. 라인은 한 6만라인 정도 있고
이것을 x , y , z로 입력받아서 프로그램밍 하는 건데요.
if(stream != NULL){
for(i=0; i<=64721; i++)
{
fscanf(stream,"%f,%f,%f",&x[i],&y[i],&z[i]);
}
}
이런 식으로 파일의 내용을 받았는데 왜 fscanf가 저런식으로 사용 되어
지는지 이해가 안됩니다.
그러니깐 fscanf가 한번 실행이 될때 마다 한라인이 데이타로 들어가는
지에 대한 이해가 안 되거든요..
질문은 여기 까지 입니다. 질문이 좀 두서가 없네요 에구 죄송 ㅠ.ㅜ

그리고 스트림에 대한 좋은 자료 있으면 추천좀 해주세요.
파일 입출력 생각보다 힘드네요 에구에구

익명 사용자의 이미지

fopen으로 파일을 입력 받아서 이 내용을 데이타로 쓰고 있는데요..
파일 내용은
수,수,수
이렇게 되어있습니다.
=> 이 말씀의 의미가
숫자, 숫자, 숫자
의 의미가 맞나요? ^^
밑에 fscanf에서의 쓰임을 보면 숫자가 맞는것 같긴 한데..
암튼, 숫자라고 치고..

일단 보통의 scanf 에서 3개의 실수형 수를 입력받고 싶다고 하면..

scanf("%f%f%f", &a, &b, &c);

이렇게 되죠?
(fscanf를 안써봐서 모르겠는데..
fscanf(stream,"%f,%f,%f",&x[i],&y[i],&z[i]); <- 이문장 잘못된거 아닌가요?
fscanf(stream,"%f%f%f",&x[i],&y[i],&z[i]); <-이렇게 해야 하지 않을까 싶은
데..)

아무튼, 보통의 scanf와 fscanf의 차이점은 입력을 어디서 받느냐 차이입니다.
그래서 fscanf는 앞에 화일 포인터를 넘겨주죠. (어디서 입력을 받느냐의 정보
를 알기 위해서 입니다.)

그리고 쓰는 형식은 동일하죠.

scanf("%f%f%f", &a, &b, &c);

라고 했을때, 입력을 다음과 같이 하게 되죠

123214.5412
62323
734.35

또는
62362.24 42314.35
5326.6

이런식으로 어떻게 쓰던 상관이 없죠?
이 scanf가 읽어들일땐, 공백문자를 기준으로 받아들입니다.
공백문자는 \n, ' ', '\t' 가 있죠?
만약 12345를 입력하고 싶은데 123 45 이렇게 하면 123만 들어가는 것이 그 이
유입니다.

이 원리는 fscanf에서도 동일하여

화일에

414 561365.2 5325.123
62462.1 453151 14145.4

이렇게 있으면 마치 라인단위로 읽은것과 같은 효과를 얻게 되죠.
(단, 이때 데이터에 ','가 들어가 있으면 문제가 발생할텐데... 아마도..)

파일 입출력.. 생각보다 쉬워요.
왜냐하면 보통의 표준입출력과 동일하거든요.
단, 방향성에서만 차이가 있게되죠.
이점 유념하시고.. 이만..

**********************************************************************
저역시 두서없는 대답이 되버렸네요. ^^;;
그리고 참고로.. for문 돌릴때 그런식으로 숫자값을 넣는거.. 안좋을텐데..
EOF찾는게 낫지 않을까 싶은데.. ^^;;
뭐.. 여담입니다.

댓글 달기

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