오늘 공부한 내용
☁️
[merge 답변] 컴퓨터 💜 2진법
🫠(개인공부)
프로그래밍실습 과제
Ex15-3 mini project – 연락처>에 다음 두 개의 함수를 추가하시오.
- delete_record() : 데이터를 파일에서 삭제한다. 삭제할 연락처의 이름을 입력 받는다. 파일 상의 해당 구조체의 name 멤버에 비어있는 문자열을 저장하는 것으로 삭제되었음을 나타낸다.
- print_all_records() : 파일에 있는 전체 데이터를 출력한다. 삭제된 데이터는 출력하지 않는다.
- main(), menu() 함수를 적당히 수정한다.
#include <stdio.h>
#include <string.h>
#define SIZE 100
typedef struct person{ // 연락처 구조체로 표현
char name[SIZE]; // 이름
char address[SIZE]; // 주소
char mobilephone[SIZE]; // 휴대폰
char desc[SIZE]; // 특징
} PERSON;
void menu();
PERSON get_record();
void print_record(PERSON data);
void add_record(FILE *fp);
void search_record(FILE *fp);
void update_record(FILE *fp);
void delete_record(FILE *fp);
void print_all_records(FILE *fp);
int main(void){
FILE *fp;
int select;
// 이진 파일 추가모드로 오픈
if((fp = fopen("address.dat", "wb+")) == NULL){
fprintf(stderr, "입력을 위한 파일을 열 수 없습니다.");
return 1;
}
while(1){
menu(); // 메뉴를 표시
printf("번호를 입력하시오: "); // 사용자로부터 정수를 받는다
scanf("%d", &select);
while(getchar() != '\n'); // 행의 끝까지 표준입력버퍼의 내용을 읽어 옴
switch(select){
case 1: add_record(fp); break; // 데이터 추가
case 2: update_record(fp); break; // 데이터 수정
case 3: search_record(fp); break; // 데이터 탐색
case 4: delete_record(fp); break; // 데이터 삭제
case 5: print_all_records(fp); break; // 데이터 전체 출력
case 6: fclose(fp); return 0; // 종료
}
}
}
void menu(){
printf("\n");
printf("=====================\n");
printf(" 1. 추가\n");
printf(" 2. 수정\n");
printf(" 3. 검색\n");
printf(" 4. 삭제\n");
printf(" 5. 출력\n");
printf(" 6. 종료\n");
printf("=====================\n");
}
// 데이터 추가
void add_record(FILE *fp){
PERSON data;
data = get_record(); // 사용자로부터 데이터 받아 구조체에 저장
fseek(fp, 0, SEEK_END); // 파일 끝으로 이동
fwrite(&data, sizeof(data), 1, fp); // 구조체 데이터 파일에 쓴다
}
// 사용자로부터 데이터 받아 구조체로 반환
PERSON get_record(){
PERSON data;
printf("이름: "); gets(data.name);
printf("주소: "); gets(data.address);
printf("휴대폰: "); gets(data.mobilephone);
printf("특징: "); gets(data.desc);
return data;
}
// 구조체 데이터 화면에 출력
void print_record(PERSON data){
printf("\n");
printf("<이름> %s\n", data.name);
printf("<주소> %s\n", data.address);
printf("<휴대폰> %s\n", data.mobilephone);
printf("<특징> %s\n", data.desc);
}
// 데이터 수정
void update_record(FILE *fp){
char name[SIZE];
PERSON data;
fseek(fp, 0, SEEK_SET); // 파일 처음으로 간다
printf("\n데이터를 수정할 사람의 이름: ");
gets(name); // 이름 입력받음
while(!feof(fp)){ // 파일 끝까지 반복
fread(&data, sizeof(data), 1, fp);
if(strcmp(data.name, name) == 0){ // 이름 비교
print_record(data);
printf("\n새로운 데이터를 입력하세요.\n");
data = get_record();
fseek(fp, -1*sizeof(data), SEEK_CUR);
fwrite(&data, sizeof(data), 1, fp);
break;
}
}
}
// 데이터 탐색
void search_record(FILE *fp){
char name[SIZE];
PERSON data;
fseek(fp, 0, SEEK_SET); // 파일 처음으로
printf("\n검색할 사람의 이름: ");
gets(name); // 이름 입력받음
while(!feof(fp)){ // 파일 끝까지 반복
fread(&data, sizeof(data), 1, fp);
if(strcmp(data.name, name) == 0){ // 이름 비교
print_record(data);
break;
}
}
}
delete_record(FILE *fp){
char name[SIZE];
PERSON data;
fseek(fp, 0, SEEK_SET);
printf("\n삭제할 사람의 이름: ");
gets(name);
while(!feof(fp)){
fread(&data, sizeof(data), 1, fp);
if(strcmp(data.name, name) == 0){
print_record(data);
printf("위 연락처를 삭제합니다.\n");
strcpy(data.name, ""); // 연락처 삭제 (이름을 빈 문자열로 설정)
fseek(fp, -1*sizeof(data), SEEK_CUR); // 파일 포인터를 방금 읽은 데이터의 시작 위치로 이동
fwrite(&data, sizeof(data), 1, fp); // 수정한 데이터를 파일에 다시 씀
break;
}
}
}
void print_all_records(FILE *fp){
PERSON data;
fseek(fp, 0, SEEK_SET);
while(fread(&data, sizeof(data), 1, fp) == 1){
if(strlen(data.name) != 0){
print_record(data);
}
}
}
CS50 1-2 정보의 표현
2) 정보의 표현
문자의 표현
ASCII(아스키코드/American Standard Code for Information Interchange)
128개의 부호로 정의되어 있는 문자를 숫자로 표현할 수 있도록 정해진 약속(표준)
A를 지난 강의에서 배운 2진법으로 표현하면,
우선 10진법 기준으로 65이므로
2^6x1 + 2^5x0 + 2^4x0 + 2^3x0 + 2^2x0 + 2x0 + 1x1 (64+1)
로 표현할 수 있다.
따라서 A를 2진법로 표현하면 1000001 이다.
이외에도 유니코드라는 표준에서는 더 많은 비트를 사용해 다른 문자들도 표현가능하게 지원하고 있다.(이모티콘 등)
그림, 영상, 음악의 표현
우리가 스크린으로 보는 그림은 빨간색, 초록색, 파란색의 수많은 작은 점들(픽셀)이 모여 조합되어 만들어지는 화면.
각각의 픽셀은 세 가지 색을 서로 다른 비율로 조합해 특정한 색을 갖게 된다
이 숫자들을 표현하는 방식을 RGB(Red, Green, Blue)라고 한다.
'구름 풀스택 1기 9oormthon training > 첫번째스터디 - GeepHub' 카테고리의 다른 글
[4주차] TIL - 230616 (0) | 2023.08.24 |
---|---|
[Conflict - Merge] 컴퓨터 💜 2진법 (0) | 2023.08.24 |
[4주차] TIL - 230612 (0) | 2023.08.24 |
[Conflict - Merge] Python - 리스트 슬라이싱 (0) | 2023.08.24 |
[3주차] TIL - 230609 (0) | 2023.08.24 |