3월23일 indirection 파일입출력
-파일입출력-
기본적으로 우리가 사용하는 프로그램같은경우는 모든 연산은 주기억장치에서 이루어지게 된다. 그리고 실행되기전까지 주기억장치에 이루어지지만 단지 컴퓨터의 전원이 꺼질경우 보관하기위해서 보조기억장치에 저장이 된다. 그래서 우리가 보는 파일들은 보조기억장치에 있고 그것이 메모리에 올라가고 다시 CPU에 거쳐서 올라가서 실행까지 가능하다.
#include<stdio.h>
int main()
{
int score;
char name[10];
FILE *fpin, *fpout;
fpin = fopen("do327.in","r");
fpout = fopen("do327.out","w");
while(!feof (fpin)) //나쁜예
{
fscanf(fpin,"%s %d",name,&score);
printf("%s\t%d\n",name,score);
fprintf(fpout,"%s\t%d\n",&name,&score);
}
fclose(fpin);
fclose(fpout);
return 0;
}
fopen
fclose
파일을 입출력하기 위해서는 꼭 필요하다. 당연히open했으니깐 close해주는것이고 fopen한값의 주소는 저장하기 위해서 FILE * 필요하다.
feof(end of file) (fpin) fpin을 받아서 끝인지 확인한다. f가 붙은것은 파일포인터를 필요로한다.
-indirection-
무엇보다 printf와 scanf는 우리보기에 너무 좋게 사용하고 있다 하지만 원래 그함수의 용도는 fprintf와 fscaf로 파일포인터였다. 그래서 실행하기 위해서 stdout(표준출력),stdin(표준입력),stderr(표준입출력오류및로그) 이다
fprintf(stdout," %d",inum); 이런형식으로 출력하게 된다. 단지 printf가 stdout을 생략하고 출력만 되게 한것이다. fprintf는 파일포인터로 받아온다 하지만 stderr와 stdout의 차이점이 중요한데 화면 출력은 둘다 된다 하지만 indirection을 통해서 dos창에서 차이점을 알수 있다.
실행파일 >test.txt 저 > 표시가 오른쪽로 넘겨준다. 그리고 로그만 따로 다른곳에 저장해서 알수 있고 관리할수 있다. 이는 포인터함수를 사용해서 이프로그램이나 문서의 자료의 대한 정보나 로그등 따로 저장해서 관리 할수 있음을 알수있다. 여기서 실행파일 0>test.txt 실행파일 2>test.txt 0와 2의 옵션이 있다. 0은 다보여주고 아무것도 넣지 않는다. 하지만 2옵션을 채택할경우 test.txt 에 stderr로 지정한 값들을 저장할수 있다.
-함수-
함수는 여러 장점들이 있다. 프로그램의 난이도를 낮출수있고 여러사람이 나누어할수도 있고 반복적으로 끌어서 사용도 가능하며 오류가 검출되지 않으면 다시 오류검사를 할 필요가없다.
#include<stdio.h>
float average(int ione, int itwo);
int main()
{
int inum;
int isunum;
float favg;
printf("please enter an integer: ");
scanf("%d",&inum);
printf("please enter an integer: ");
scanf("%d",&isunum);
favg =average(inum,isunum);
printf("The average of %d and %d is %6.3f\n",inum,isunum,favg);
return 0;
}
float average(int ione, int itwo)
{
float favgr;
favgr=(float)(ione+itwo)/2;
return favgr;
}
float average(int ione, int itwo)
여기서 float는 반환(자료)형이다.
average는 함수 이름이며
(int ione,int itwo)이는 인자또는 인수라고 한다.
이모든것을 합쳐서 함수의 원형 또는 프로토타입 인터페이스라고 한다.
무엇보다 함수의 사용에서 원형과 인수 그리고 반환자료형 그리고 리턴값 알아야한다.