블로그 이미지
송시혁

calendar

1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Notice

Tag

Recent Post

Recent Comment

Recent Trackback

Archive

 

p5-9예제

 

 

 

#include <stdio.h>
int main()
{
  int score;
  char name[10]; //1byte를 10개를 만든다.
  
  FILE *fpin; //FILE 텍스트 파일 입출력시 사용. 4바이트 포인터이기 때문.
  FILE *fpout;
  
  fpin = fopen("d0327.in""r"); // 이부분 외운다. 특히 fpin.
  
  if(0 == fpin) // 위의 fpin이 지정한 파일이름과 다를때 실행된다.("d0327")
  {
    printf("d0327.in파일을 열수 없습니다\n");  
    return 0;
  }
  else
  {
    printf("d0327.in파일을 열렸습니다\n");  
    
  }
  fpout = fopen("d0327.out""w");
  
  if(0==fpout) //파일이름 d0327과 다를때 실행.
  {
    printf("d0327.in파일을 열수 없습니다\n");
    fclose(fpin);  // fpin이 열려 있는 상태이므로 닫아야 한다.
    return 0;
  }
  
  else
  {
    printf("d0327.in파일을 열렸습니다\n");  
    
  }
  
  while(0== feof(fpin)) //while(!feof (fpin))
  {
    fscanf(fpin, "%s %d", name, &score);//fpin에서 내용을 입력받는다.
    fprintf(stdout,"%s\t%d\n", name, score);//모니터에 출력
    fprintf(fpout, "%s\t%d\n", name, score);//fpout 하드에 출력
  }
  fclose(fpin);//fpin을 닫는다.
  fclose(fpout); // fpout을 닫는다.
  
  return 0;
}

  

 while에서 fscanf를 주목한다. fscanffpin내부에 있는 글자를 입력받느다.

메모장에 kim, park...등을 %s자료형으로 받는다.

그리고 숫자는 93, 87, .....등을 %d로 받는다.

이 fscanf가 스캔에프의 원본이다. scanf는 f scanf의 축약 형태이다.

즉, fpin과 fpout이 생략이 되어있다.

fprintf(stdout,"%s\t%d\n", name, score); 이부분은 원래 소스에선 그냥 printf문이였다.

printf("%s\t%d\n", name, score);  이부분을 fprintf문으로 수정하여 stdout을 써서

모니터에 출력하였다.

 fpin = fopen("d0327.in", "r"); 여기에서

fopen - 파일을 연다는 명령문

d0327 - 텍스트 파일 이름

" r"- read. 이파일을 읽게 다는 의미.(참고로 파일 - 우클릭 - 속성- 읽기전용

 해본다. 파일에 접근할 수 없다.)

"w" - write -  쓰기 - 읽어온 파일을 써서 출력하는것.

fclose - 파일을 닫다. 이명령문을 쓰지 않으면 무한 반복된다.

 

posted by 송시혁