Prosto
파일 입출력(FILE*) 이해, 예제 -2 -C언어 본문
'파일 입출력 - 파일을 생성하고 쓰고, 읽을 수 있는 방법!'
저번 시간에 설명했듯이 프로그래밍을 하다보면 파일을 만들어서 데이터를 보관하는 경우도 있고,
어떤 데이터가 저장된 파일을 읽어와 사용하는 경우도 있습니다.
(C언어에서) 이때 사용하는 것이 바로 파일 입출력입니다.
이번에는 그 파일 입출력에서 fscanf에 해당하는 파일 입력 부분을
함께 보도록 하겠습니다.
(fopen, fclose, fprintf에 대하여는 저번 시간에 자세히 봤죠?)
그리고 fscanf의 예제와 문제까지 끝나면
조금 더 심화된 문제들을 풀어보도록 하겠습니다.
fprintf는 파일에 출력을 주는 거였죠?
마치 우리가 printf로 콘솔창에 출력을 시킨 듯 말이죠.
그렇다면 fscanf는 무엇과 비슷할까요?
(바로 scanf겠죠?)
우리가 printf 후에 scanf를 차례대로 했던 것처럼,
fprintf 후 fscanf를 보고있는 것입니다!
fscanf는 파일에서 입력을 받아오는 것입니다.
예를 들어 txt 파일 첫 번째 줄에 "안녕하세요."라고
입력되어 있었다면 우리는 그 "안녕하세요."라는 문자열을 얻어올 수 있는 거죠.
뿐만 아니라 숫자도 얻어올 수 있겠죠? 차근차근 확인해봅시다.
fscanf 어떻게 사용할까요?
fprintf와 scanf를 합친 느낌으로 보면 됩니다.
fscanf(파일포인터, "자료형", &받을 변수);입니다.
예를 들면 fscanf(fp, "%d", &num); 같은 방식이죠.
이렇게 txt나 여타 파일에서 fscanf를 이용하면 읽어 우리의 프로그램에서 사용이 가능한 것입니다.
간단 예제를 확인해볼까요?
이렇게 정수를 fprintf를 이용하여 파일에 출력해주고,
다시 우리가 그 파일을 열어 fscanf로 변수에 입력하여 그 결과를 확인해봤습니다.
fscanf 사용에 있어서 중요한 점을 확인해봐야겠죠?
파일입력을(fscanf) 받고 싶다면 fopen을 할 때 권한(모드)를"rt"로 주어야 제대로 원하는 값을 받을 수 있습니다.
fps = fopen("exex.txt", "rt"); 같이 말이죠.
그럼 그 다음으로 fscanf(fps, "%d", &tempNum); 여기는 우리가 파일에 있던 정수를 하나 받아왔죠. fprintf와 유사하고 scanf와도 유사하다는 것을 알 수 있죠?
첫 번째 인자는 파일포인터입니다. 어떤 파일에 처리해줄지 정해줘야겠죠.(fprintf와 같습니다.) 두 번째 인자는 데이터 형식입니다. 우리는 여기서 정수를 받을 것이니 %d를 썼죠? 세 번째 인자는 받을 변수입니다. tempNum을 int로 선언해둔 후 값을 받아왔죠? 나머지 fclose는 전과 똑같습니다. 사용했으면 닫아줘야겠죠. 그럼 fscanf를 이용한 예제를 하나 더 보며 익혀볼까요?
이렇게 형식을 주고 fprintf를 이용하여 파일출력을 한 후 fscanf로 그 형식에 알맞게 받아온다면 제대로 된 결과를 받아볼 수 있습니다. 제대로 사용하기 위해 추가로 예제 하나만 더 보도록 할까요? (feof 사용에 대한 부분입니다.) 어떤 프로그램이냐하면 파일에 1부터 100까지 정수를 출력시켜보고 그 파일을 읽어서 콘솔에 표시합니다.
(exex 텍스트 끝이 100인 것을 확인할 수 있습니다.) 그럼 그 소스를 봅시다!
(우측에 살짝 출력 결과도 같이 볼 수 있습니다.) 자 여기서 fscanf를 이용하여 입력받고 printf로 출력해주는 부분이 있는 while문을 주목해주세요. while문에 조건으로 (feof(fps)==0)가 있죠? 여기서 쓰인 feof(파일포인터)는 현재 파일포인터가 가리키는 파일의 내용이 있는지 여부를 확인하고 있으면 0, 없으면 1을 반환해줍니다. while문을 반복하며 fscanf로 입력을 받을 때마다 하나씩 하나씩 이동해가다가 최종적으로 100까지 가면 더 이상 내용이 없으니 1을 반환하여 while문이 종료된 것입니다. 그럼 이 내용들을 이용한 문제들을 풀어볼까요? 문제1. (1)파일포인터를 이용하여(fprintf) 파일에 구구단의 2단을 넣으시오. (2)파일에 넣은 구구단을 파일포인터로 읽어들여(fscanf) 화면에 다시 출력하시오. (콘솔 출력 + 파일 생성 결과 예)
문제2. 해당 프로젝트 내에 텍스트 파일을 만들어 임의의 텍스트를 저장한 후(몇 줄에 걸친 긴 내용) 프로그램에서 해당 파일의 내용들을 읽어들여 콘솔창에 출력하시오. (굳이 fprintf로 입력하지 않아도 됩니다. 입력해도 무관. 파일입력(fscanf, fgets)과 feof 사용이 중요.) (콘솔 출력 + 파일 생성 결과 예) 결과는 모두 잘 나왔나요? 그럼 이제 제가 작성한 코드와 실행 결과를 올리겠습니다. 비교해보고 참고하세요. -1번 문제-
for문을 이용하여 fprintf로 구구단 2단을 등록해줬고, 다시 가지고 올 때도 마찬가지로 for문을 이용하여 fscanf로 가지고와서 printf로 출력해줬습니다. -2번 문제-
fpp를 이용하여 파일에 출력한 부분은 안 했어도 상관 없습니다. 밑에 문자열을 가지고 올 때 어떻게 했는지 보세요. 같은 방법으로 하셨나요? 지금까지 파일 입출력에 대하여 알아봤습니다. 이번 2는 fscanf에 대하여 알아봤고 fprintf / fscanf / feof / fgets까지 더 자세히 다뤄봤습니다. 파일 입출력의 이해에 도움이 좀 됐다면 좋겠습니다.
( 파일 입출력1, 파일 입출력 오류가 발생한다면 ) 질문은 댓글이나 메일로 따로 연락주시면 시간되는 때 답변드리겠습니다. ( 연락 )
'Programing > C Programing' 카테고리의 다른 글
파일입출력과 문자열 문제 풀기 -C언어 (0) | 2016.09.20 |
---|---|
파일 입출력 오류 / 해결 방법 (3) | 2016.09.20 |
do while문(반복문3) 이해, 예제 -C언어 (0) | 2016.09.17 |
while문(반복문2) 이해, 예제 -C언어 (10) | 2016.09.17 |
파일 입출력(FILE*) 이해, 예제 -1 -C언어 (12) | 2016.09.17 |