먼저 불러들일 텍스트 파일 input.txt에는 숫자 세개가 적혀있다.
이제 C언어로 파일을 읽어 이 숫자들을 변수에 저장할 것이다.
컴파일후 실행할 때 ./a.out input.txt 을 입력하면 정상적으로 실행 된다. (input.txt자리에 읽을 파일 이름 쓰기)
💡 부연 설명
- 커맨드에 입력한 파일 이름은 argv[1]에 저장됨
(argv 배열에는 커맨드라인에 입력한 내용이 띄어쓰기로 구분되어 담긴다)
- fopen 함수는 파일을 여는 기능 / "r" : 파일 읽기 모드
- 변수 fp에 파일을 가리키는 포인터가 저장됨
- fscanf 함수는 파일에 있는 내용을 주어진 변수에 저장함. 이 경우 텍스트에 적힌 숫자 세개를 각 변수 num1, num2, num3에 저장함
- fclose 마지막에는 파일을 꼭 닫아줘야 함
이번에는 텍스트를 불러온 다음 프로그램 내부에서 수정을 해서 수정한 내용으로 새로운 텍스트 파일을 만들 것이다.
파일을 불러오는 과정은 1번에서 했던 것과 동일하다.
불러온 숫자들에 100을 더해서 새로운 텍스트 파일에 저장했다.
실행할 때는 ./a.out input.txt output.txt 의 형식으로 입력한다.
(input자리에 읽을 파일 이름, output자리에 새로 만들 파일 이름)
💡 부연 설명
- 이번에는 두 개의 파일이 필요하기 때문에 FILE* 변수를 두 개 선언했다 (fp1, fp2)
- fopen의 "w"는 쓰기모드를 의미함
- fprintf 함수로 fp2가 가리키는 파일(output.txt)에 변수의 내용들을 저장함
여기서는 input.txt의 내용을 읽어와 바이너리 파일로서 저장할 것이다.
실행 커맨드 :
./a.out input.txt output.bi
💡 부연 설명
- 바이너리 파일을 쓸 때는 fopen을 바이너리 파일 쓰기 모드 "wb" 로 설정한다
- fwrite는 바이너리 파일을 쓰는 함수
- fwrite(값이 담겨 있는 변수의 주소, 저장할 변수의 크기, 저장할 변수의 개수, 저장할 파일)
- 첫줄에서 num1을 저장하고 나면 자동으로 포인터가 그 다음으로 이동하기 때문에 파일에 num1, num2, num3이 차례차례 저장된다
이제 위에서 저장한 바이너리 파일을 읽어올 차례
실행 커맨드 :
./a.out output.Bi
💡 부연 설명
- fopen은 바이너리 읽기 모드 "rb" 로 설정
- 바이너리 파일을 읽을 때는 fread를 쓴다
- fread(값을 저장할 변수의 주소, 변수 크기, 변수 개수, 읽을 파일)
기본 원리는 같기 때문에 배열명 자체가 어드레스인점, 변수 크기에만 신경쓰면 된다.
이것도 기본원리는 같다. 오히려 이쪽이 더 프로그램이 단순하기 때문에 여러 개의 값들을 불러올 땐 배열을 쓰는 게 훨씬 편하다.
fopen 모드 설정 | 필요한 함수들 | |
텍스트 파일 읽기 | r | fscanf |
텍스트 파일 쓰기 | w | fprintf |
바이너리 파일 읽기 | rb | fread |
바이너리 파일 쓰기 | wb | fwrite |
저는 실험 데이터의 입출력에 c언어가 필요해서, c언어 자체의 기술적인 면보다는 상황 별로 필요한 코드에 초점을 맞춰서 정리해봤습니다. 혹여 잘못된 부분이 있으면 지적부탁드립니다.
C언어 최소제곱법을 이용해 직선과 상관계수 구하기 (0) | 2021.01.02 |
---|---|
C언어 수치계산 - 다항식 계산 알고리즘 (호너법 Horner's method) (2) | 2020.11.23 |
C언어 수치계산 미분방정식 오일러법, 4차 룽게 쿠타법 알고리즘 (0) | 2020.09.05 |
C언어 수치계산 수치적분 (구분구적법, 사다리꼴, 심슨 공식) (0) | 2020.09.03 |
C언어 예제 두 수의 합 구하기 (0) | 2020.06.04 |
댓글 영역