Tuesday, May 23, 2006
C언어] 출력을 파일로 저장할 때는 printf() 가 아닌 fprintf() 함수를 사용하세요
printf() 함수는 출력을 stdout 즉 '명령 프롬프트 화면'으로만 보냅니다. 따라서 재지향을 사용하지 않는 한, 파일로 저장할 수는 없습니다.
이때는 fprintf() 함수를 쓰면 됩니다. 결과를 파일로 출력하기 위한 특별한 printf() 함수입니다.
※ 이것은 윈도 프로그램이 아니라 콘솔 프로그램 즉 '명령 프롬프트용 프로그램'이기 때문에 명령 프롬프트에서 컴파일하는 것이 좋습니다.
※ 최대한 쉽게 표현하기 위해 위의 소스에는 에러 검사 코드를 넣지 않았습니다. "[C언어/기초] fopen() 과 fprintf() 함수의 에러 검사 코드" 에 에러 검사 코드를 추가한 버전이 있습니다.
위의 소스를 foo.c 등의 이름으로 저장하고 컴파일하면 test.txt 라는 파일이 생길 겁니다.
※ 위의 창에서 "cl foo.c & foo" 의 & 기호는 컴파일한 후, 생성된 foo.exe라는 파일을 실행시키라는 의미입니다. C언어와는 관계없고, 명령 프롬프트 창에서 제공하는 특수 기호입니다. 2개 이상의 명령어을 한 줄에 적는 방법입니다.
test.txt 파일을 메모장 등으로 열어 보시면
하하하하 2
ABCD
이렇게 fprintf() 함수의 출력 결과가 파일에 적혀 있을 것입니다.
참고로, fopen("test.txt", "w") 에서 "w" 는 파일 열기 모드를 가리키는데, 파일을 "텍스트 모드로" 그리고 "쓰기(writing) 모드"로 열고, 만약 같은 이름의 파일이 이미 있다면 덮어쓰라는 의미입니다. 이러면 이미 있던 파일의 내용은 허공으로 사라집니다.
무슨 파일이든 파일을 한 번 열었으면 꼭 닫아주어야 합니다. 그렇지 않으면 파일이 깨질 수도 있고, 파일이 지워지지 않을 수도 있고 여러가지 문제가 생길 수 있습니다.
그리고 텍스트 파일 읽기 쓰기 작업을 주로 하신다면, C보다는 펄(Perl)이 더 적당합니다. 펄은 텍스트 파일 다루기 전용 언어라고 할 수도 있을 정도로 강력한 기능들이 많습니다.
이때는 fprintf() 함수를 쓰면 됩니다. 결과를 파일로 출력하기 위한 특별한 printf() 함수입니다.
#include <stdio.h>
void main(void) {
FILE *out;
out = fopen("test.txt", "w"); // 출력을 저장할 파일을 만들어서 열기
fprintf(out, "하하하하 %d\nABCD", 1 + 1); // 출력을 파일로 저장
fclose(out); // 파일을 열었으면 반드시 닫아 주어야 합니다
}
void main(void) {
FILE *out;
out = fopen("test.txt", "w"); // 출력을 저장할 파일을 만들어서 열기
fprintf(out, "하하하하 %d\nABCD", 1 + 1); // 출력을 파일로 저장
fclose(out); // 파일을 열었으면 반드시 닫아 주어야 합니다
}
※ 이것은 윈도 프로그램이 아니라 콘솔 프로그램 즉 '명령 프롬프트용 프로그램'이기 때문에 명령 프롬프트에서 컴파일하는 것이 좋습니다.
※ 최대한 쉽게 표현하기 위해 위의 소스에는 에러 검사 코드를 넣지 않았습니다. "[C언어/기초] fopen() 과 fprintf() 함수의 에러 검사 코드" 에 에러 검사 코드를 추가한 버전이 있습니다.
위의 소스를 foo.c 등의 이름으로 저장하고 컴파일하면 test.txt 라는 파일이 생길 겁니다.
D:\Z>cl foo.c & foo
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
foo.c
Microsoft (R) Incremental Linker Version 7.10.3077
Copyright (C) Microsoft Corporation. All rights reserved.
/out:foo.exe
foo.obj
D:\Z>
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
foo.c
Microsoft (R) Incremental Linker Version 7.10.3077
Copyright (C) Microsoft Corporation. All rights reserved.
/out:foo.exe
foo.obj
D:\Z>
※ 위의 창에서 "cl foo.c & foo" 의 & 기호는 컴파일한 후, 생성된 foo.exe라는 파일을 실행시키라는 의미입니다. C언어와는 관계없고, 명령 프롬프트 창에서 제공하는 특수 기호입니다. 2개 이상의 명령어을 한 줄에 적는 방법입니다.
test.txt 파일을 메모장 등으로 열어 보시면
하하하하 2
ABCD
이렇게 fprintf() 함수의 출력 결과가 파일에 적혀 있을 것입니다.
참고로, fopen("test.txt", "w") 에서 "w" 는 파일 열기 모드를 가리키는데, 파일을 "텍스트 모드로" 그리고 "쓰기(writing) 모드"로 열고, 만약 같은 이름의 파일이 이미 있다면 덮어쓰라는 의미입니다. 이러면 이미 있던 파일의 내용은 허공으로 사라집니다.
무슨 파일이든 파일을 한 번 열었으면 꼭 닫아주어야 합니다. 그렇지 않으면 파일이 깨질 수도 있고, 파일이 지워지지 않을 수도 있고 여러가지 문제가 생길 수 있습니다.
그리고 텍스트 파일 읽기 쓰기 작업을 주로 하신다면, C보다는 펄(Perl)이 더 적당합니다. 펄은 텍스트 파일 다루기 전용 언어라고 할 수도 있을 정도로 강력한 기능들이 많습니다.
tag: cpp
C언어 | C/C++ (Visual C++)
<< Home