티스토리 뷰
12장 Quiz (빈칸채우기)
데이터가 입력될 때마다 구조체 변수에 저장하여 파일에 추가
입력이 종료되면 파일의 데이터를 처음부터 끝까지 출력
성명이 end면 반복 종료
fwrite() 로 입력된 emp변수 내용을 fp에 저장(기존 파일에 내용 추가)
fopen() 추가모드로 파일 열기
fread() fp에서 읽어 구조체 변수에 저장
구조체 변수 emp 출력
fread()실패하면 반복 탈출, 성공하면 세 번째 인자 반환?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#pragma warning(disable:4996)
struct EMP {
char name[20];
char telno[20];
int salary;
};
int main()
{
FILE* fp;
struct EMP emp;
int i;
if ((fp = fopen("DATA5.dat", "ab")) == NULL)
{
printf("file open error. \n");
exit(1);
}
while (1)
{
printf("\n성명 ? (입력종료:end) ");
gets(emp.name);
if (!strcmp(emp.name, "end"))
break;
printf("월급 ? ");
scanf("%d%*c", &emp.salary);
printf("전화번호 ? ");
gets(emp.telno);
//코드추가
fwrite(&emp, sizeof(emp), 1, fp); //파일 저장
}
fp = freopen("DATA5.dat", "rb", fp);
printf("\n데이터 파일 Load \n");
while (1)
{
//코드추가
if (fread(&emp, sizeof(emp), 1, fp) != 1)
break;
printf("%s, %s, %d \n", emp.name, emp.telno, emp.salary);
}
fclose(fp);
return 0;
}
답
"ab"
&emp, sizeof(emp), 1, fp
fread(&emp,sizeof(emp),1,fp)!=1
[12-2]
ex01.dat 파일을 write 모드로 open
A부터 순서대로 26개의 문자가 저장되므로 정답은 1번이다.
[12-3]
2번 이진 모드이지만 fscanf를 사용하였다.
[12-3]
[12-3]
[12-6]
텍스트 파일을 문자열 단위로 읽어 표준 출력에 출력시키는 프로그램
문자열은 한 행 기준 80 문자 단위로 읽어 출력
fgets() 함수 사용
fgets() 함수 실패 시 중단
#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)
int main()
{
char ch[80];
FILE* fp;
fp = fopen("ex06.dat", "r");
while (fgets(ch, 80, fp))
printf("%s\n", ch);
fclose(fp);
return 0;
}
혹은
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE* fp;
char line[81]; // 문자열을 저장할 배열
fp = fopen("text.txt", "r");
if (fp == NULL) {
printf("파일을 열 수 없습니다.\n");
exit(1);
}
while (fgets(line, sizeof(line), fp) != NULL) {
printf("%s", line);
}
fclose(fp);
return 0;
}
(
왜 안되지...'
알고보니 텍스트 파일 인코딩 방식 문제였나 암튼 바꾸니까 됨
다른 코드 짤땐 열렸는데 아몰라

까꿍이 서울시 강남구 역삼동 100 0234290001
진달래 서울시 성동구 옥수동 200 0222940002
개나리 속초시 대포동 바다 1번지 0612210003
[12-7]
이미 작성된 텍스트 파일을 문자열 단위로 읽어 표준 출력에 출력시키는 프로그램
성명, 나이, 월급, 전화번호 저장
읽기 위해 fscanf() 사용
fscanf() 함수가 실패할 경우 읽기 중단
#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)
struct list {
char name[20];
int age, sal;
char num[20];
};
int main()
{
struct list man[3];
int i;
FILE* fp;
fp = fopen("DATA1.txt", "rt");
while(
fscanf(fp, "%s %d %d %s", man->name, &man->age, &man->sal, man->num)==4)
printf("%s, %d, %d, %s\n", man->name, man->age, man->sal, man->num);
return 0;
}
출력해보니 굳이 구조체변수가 배열일 필요가 없다
#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)
struct list {
char name[20];
int age, sal;
char num[20];
};
int main()
{
struct list man;
FILE* fp;
fp = fopen("DATA1.txt", "rt");
while(
fscanf(fp, "%s %d %d %s", man.name, &man.age, &man.sal, man.num)==4)
printf("%s, %d, %d, %s\n", man.name, man.age, man.sal, man.num);
return 0;
}
결과
까꿍이, 23, 1750000, 02-3429-0001
진달래, 30, 1600000, 02-2294-0002
개나리, 21, 1940000, 02-564-0003
'Computer Science > 컴퓨터 코딩 데이터' 카테고리의 다른 글
컴퓨터 프로그램 실행 과정과 CISC 명령어 (0) | 2024.03.07 |
---|---|
[마이크로프로세서] CISC와 RISC의 차이, CISC 기본 구조 (0) | 2024.03.07 |
[C언어] 든든한 C 프로그래밍 3판 11장 워크북 답 풀이 (0) | 2023.07.12 |
[C언어] 든든한 C 프로그래밍 3판 12장 워크북 답 풀이 (0) | 2023.07.12 |
[C언어] 든든한 C 프로그래밍 3판 11장 연습문제 답 풀이 (0) | 2023.07.10 |
[C언어] 든든한 C 프로그래밍 3판 10장 워크북 답 풀이 (0) | 2023.07.09 |
[C언어] 든든한 C 프로그래밍 3판 9장 워크북 답 풀이 (0) | 2023.07.08 |
[C언어] 든든한 C 프로그래밍 3판 10장 연습문제 답 풀이 (0) | 2023.07.07 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 리브엠
- 카시오
- 북문
- 맛집
- f-94w
- 방어동작
- f-91w
- 알뜰폰요금제
- a모바일
- 알리익스프레스
- 문서 스캔
- 네이버페이
- 10만포인트
- 파스타
- 리브모바일
- 카카오페이
- 방향장
- 티스토리챌린지
- mealy
- 알뜰 요금제
- 메쉬 밴드
- 경북대
- 시계 줄
- 할인
- 배송기간
- Liiv M
- 오블완
- 타란튤라
- 계산방법
- 교체
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함