일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 언제나휴일
- 클래스 다이어그램
- 안드로이드 앱 개발
- 무료 동영상 강의
- 유튜브 동영상 강의
- 강의
- 표준 입출력
- 캡슐화
- C++
- 추천
- c언어
- 실습으로 다지는 c#
- 산책하기 좋은 곳
- 알고리즘
- 프로젝트
- 졸업 작품 소재
- Windows Forms
- 동영상 강의
- 표준 라이브러리 함수
- 원격 제어 프로그램
- 실습
- 네트워크 프로그래밍
- 동영상
- 파이썬
- 소켓 통신
- 충남 천안
- 졸업 작품
- c#
- 언제나 휴일
- 소스 코드
- Today
- Total
목록c언어 (101)
프로그래밍 언어 및 기술 [언제나휴일]
제어문, 정사각형, 삼각형, 역삼각형, 다이아몬드 출력 [C언어]알고리즘n:←정수 입력반복(line:0→n)반복(space:0→n-line-1)공백 출력반복(star:0→2*line+1)‘*’ 출력개행반복(line:n-2→n)반복(space:0→n-line-1)공백 출력 반복(star:0→2*line+1)‘*’ 출력개행소스코드//반복문 연습 - 다이아몬드 출력// 입력// 5 - n//출력// * 0- 공백 4, 별1, 개행// *** 1- 공백 3, 별3, 개행 // ***** 2- 공백2, 별5, 개행// ******* 3- 공백1, 별7, 개행 // ********* 4- 공백0,..
제어문, 정사각형, 삼각형, 역삼각형, 다이아몬드 출력 [C언어] 알고리즘n:←출력할 라인 수 입력 반복(line:0→n)—반복(space:0→line)——공백 출력—반복(star:0→2(n-line)-1)——‘*’ 출력—개행소스코드 //반복문 연습 - 역삼각형 출력//입력//5 - n //출력// ********* 0- 공백0, 별9, 개행// ******* 1- 공백1, 별7, 개행 // ***** 2- 공백2, 별5, 개행// *** 3- 공백 3, 별3, 개행// * 4- 공백 4, 별1, 개행 //공백 = line//별 = 2*(n-line)-1//개행=1 #include in..
제어문, 정사각형, 삼각형, 역삼각형, 다이아몬드 출력 [C언어]알고리즘n:←출력할 라인 수 입력 반복(line:0→n)—반복(space:0→(n-line))——공백 출력—반복(star:0→(2line+1))——‘*’ 출력—개행소스코드//반복문 연습 - 삼각형 출력//입력// 5 - n//출력// * 0- 공백 4, 별1, 개행// *** 1- 공백 3, 별3, 개행 // ***** 2- 공백2, 별5, 개행// ******* 3- 공백1, 별7, 개행 // ********* 4- 공백0, 별9, 개행//공백 = n-line//별 = 2*line +1//개행=1#include int..
제어문, 정사각형, 삼각형, 역삼각형, 다이아몬드 출력 [C언어]알고리즘n:←출력할 라인 수 입력반복(i:0→n)—반복(j:0→n)——‘*’출력—개행소스 코드//정사각형 출력// 입력// 5//출력// *****// *****// *****// *****// *****#include int main(void){ int n; int i, j; printf("출력할 라인 수:"); scanf_s("%d", &n);//입력 for (i = 0; i 언제나휴일 추천 여행 및 산책
안녕하세요. 언제나휴일의 언휴예요.함수 선언, 함수 정의, 함수 호출 [C언어] 프로그램을 만들다 보면 자주 사용하는 알고리즘이 있어요.이러한 코드는 이름(함수 명), 알고리즘에 필요한 입력 인자(입력 매개변수), 원하는 결과(리턴 타입)를 정하여 알고리즘을 전개하여 함수로 만들 수 있습니다.함수를 만들면 필요할 때 함수를 호출하여 사용할 수 있어요.함수 개요우리는 초등학교부터 함수에 관한 교육을 받아왔어요.블랙 박스에 입력 값을 넣으면 출력 값이 나오는 형태, y = x+2 처럼 방정식 형태, 정의역과 공역의 요소를 매핑하는 형태와 f(x) = x+2 등 다양하게 다루었어요. 함수 정의문C언어의 함수 관련 문법은 크게 함수 정의문, 함수 호출문, 함수 선언문이 있어요.함수 정의문은 함수를 만드는 구문을..
안녕하세요. 언제나 휴일의 언휴예요.값에 따라 수행할 구문을 선택하는 switch case 문 [C언어] 선택문C언어에서는 특정 표현의 값에 따라 구문을 선택하여 수행하는 switch 선택문을 제공하고 있어요.switch(표현){case 상수: [수행 구문] [break]case 상수: [수행 구문] [break]…[default:] [수행구문] [break] }switch 선택문에서 중괄호는 반드시 달아야 합니다. 물론 개발할 때 중괄호를 달지 않으면 문법 오류가 발생하기 때문에 개발할 때 실수할 확률은 지극히 낮겠죠.여러 조건에 따라 수행할 구문을 표현할 때 if 조건문을 사용하면 복잡할 때가 있습니다. 이 때 switch 선택문으로 해결할 수 있는지 고민해 보세요.학점 부여하기로 조건문과 선택문 비..
안녕하세요. 언제나 휴일의 언휴예요.대입 연산의 왼쪽(좌항)에 오는 표현을 l-value [C언어]대입 연산자와 l-value복합 대입 연산자1. 대입 연산자와 l-value프로그래밍에서 변수에 원하는 값을 설정할 때 대입 연산자를 사용하죠.당연히 대입 연산자 왼쪽(좌항)에는 상수 표현은 올 수 없어요.정수형 변수 i가 있을 때 i+3=7; 표현은 문법적 오류가 발생해요.i+3의 연산 결과는 상수이며 l-value로 사용할 수 없어요.#include int main(){ int i = 0;//초기화 i = 7;//변수 i에 7을 설정 i + 3 = 7;//i+3에 7을 설정. i+3의 연산 결과는 상수 return 0;} 위 코드를 빌드하였을 때 나오는 결과를 보면 l-value로 ..
안녕하세요. 언제나 휴일에 언휴예요.비트 자리 이동 연산, 쉬프트 연산 [C언어] 이번 강의는 비트 자리 이동 연산, 쉬프트 연산을 알아볼게요.1. 왼쪽 쉬프트 >1. 왼쪽 쉬프트 왼쪽 쉬프트 연산은 1자리를 이동할 때 2로 곱한 결과와 같습니다. 다음의 소스 코드는 부호 없는 정수 3을 4자리 왼쪽으로 자리 이동 시키는 소스 코드입니다.그리고 부호 있는 정수 -3을 4자리 왼쪽으로 자리 이동 시키는 소스 코드입니다.#include int main(){ unsigned u1 = 3, u2; u2 = u1 실행 결과는 다음과 같습니다.16진수: 3 3010진수: 3 4816진수: FFFFFFFD FFFFFFD010진수: -3 -48결과를 보면 부호 없는 정수는 원래 값 3에 2의 4승인 16..
안녕하세요. 언제나 휴일에 언휴예요.mask를 이용한 암호화 및 이진수 출력[C언어]이번 강의는 비트 연산을 이용한 mask입니다.^ mask를 이용하여 암호화하는 것과 & mask를 이용하여 이진수를 출력하는 실습이예요.1.^mask를 이용한 암호화2.&mask를 이용한 이진수 출력1. ^mask를 이용한 암호화비트 연산 이용하면 간단한 대칭형 암호화를 할 수 있어요.대칭형 암호화는 암호화할 때와 복호화할 때 같은 키를 이용하는 암호화를 말합니다.다음의 코드는 ^연산을 이용하여 평문을 암호화하고 복호화하는 예제입니다.#include int main(){ int pd = 0x12345678; int key = 0x2345873a; int sec = pd ^ key; int data ..
안녕하세요. 언제나 휴일에 언휴예요.비트 연산 & | ^ ~ [C언어] 이번 강의는 비트 연산입니다. 비트 연산은 같은 자리의 비트끼리 논리 연산을 수행합니다.그리고 C언어의 비트 연산의 피 연산자는 정수 형식이예요.1. 비트 연산 & | ^ ~2. 비트 and mask1. 비트 연산 & | ^ ~예를 들어 정수 6과 5의 비트 연산을 알아봅시다.정수 6은 이진수로 0000 0000 0000 0110이고 5는 0000 0000 0000 0101 입니다.만약 비트&(and)를 수행하면 다음 그림처럼 끝에서 세 번째 자리만 모두 1입니다. 이진수로 0000 0000 0000 0100입니다.따라서 6&5의 결과는 4입니다.만약 비트|(or)를 수행하면 다음 그림처럼 끝에서 세 자리는 둘 중 하나는 1입니다.이..
안녕하세요. 언제나 휴일에 언휴예요.비교 연산 [C언어] 이번 강의는 비교 연산입니다.1. 비교 연산2. 비교 연산에서 주의할 점1. 비교 연산비교 연산은 연산 기호 및 하는 일이 직관적입니다. 기본적인 비교 연산은 어려움이 없다는 것이죠.#include //표준 입출력 헤더int main(){ printf("%d\n", 1 2); printf("%d\n", 1 >= 2); return 0;}비교 연산의 연산 결과도 참이면 1, 거짓이면 0입니다.1101002. 비교 연산에서 주의할 점비교 연산을 이용하여 세 가지 이상의 값을 비교할 때는 논리 연산을 이용하세요. 수학에서 2C언어에서는 연산을 하나씩 수행합니다.22결국 0#include //표준 입출력 헤더int main(){ ..
안녕하세요. 언제나 휴일에 언휴예요.논리 형식과 논리 연산[C언어] 이번 강의는 논리 형식과 논리 연산을 다룰 거예요.1. 논리 형식2. 논리 값, 참과 거짓3. 논리부정(NOT) 연산자는 !4. 논리곱(AND) 연산자는 &&, 논리합(OR) 연산자는 ||5. 논리 연산에서 주의할 점 16. 논리 연산에서 주의할 점 21. 논리 형식C언어에는 논리 형식을 제공하지 않아요. 대신 기본 형식(char, short, int, long, float, double 등)과 메모리 주소처럼 수로 나타낼 수 있는 것은 모두 논리 형식으로 사용할 수 있습니다.이번 강의를 통해 피 연산자로 다양한 형식을 사용할 수 있다는 것을 느낄 수 있었으면 합니다.2. 논리 값, 참과 거짓C언어는 논리 형식을 제공하지 않습니다.논리..
안녕하세요. 언제나 휴일에 언휴예요.나머지 연산을 사용하면 편한 곳 [C언어 동영상] 이번에는 나머지 연산을 사용하여 문제를 해결하는 대표적인 예를 알아볼게요. 프로그램을 작성하다보면 0123401234012… 처럼 특정 범위 내의 수를 순환하며 사용할 때가 발생합니다.원형 큐에서 front와 rear를 이동시킬 때는 대표적인 예로 들 수 있어요.원형 큐다음처럼 코드를 작성하여 실행시켜 보면 어떻게 동작하는지 느낌이 오실 거예요./* https://ehpub.co.kr 언제나 C언어 나머지 연산, 이럴 때 사용하자. 0123401234012...*/#include //표준 라이브러리 헤더#include //표준 입출력 헤더int main(){ int i = 0; printf..
안녕하세요. 언제나 휴일에 언휴예요.실수 형식 double, float 표현과 출력 [C언어 동영상 강의] 이번 강의에서는 실수 형식 강의예요. 실수 형식을 표현하는 방법과 출력하는 방법을 알아봅시다.1. 실수 형식의 메모리 크기2. 실수 리터럴 표현3. 실수 출력 - 소숫점 이하 출력할 자리 표현4. 실수 출력 포멧 %f %g %e5. 실수 사용에서 주의할 점1. 실수 형식의 메모리 크기먼저 sizeof로 실수 형식의 메모리 크기를 알아보아요.#include //표준 입출력 헤더int main(void){ printf("sizeof(double):%d bytes, sizeof(float):%d bytes\n", sizeof(double),sizeof(float)); retur..
안녕하세요. 언제나 휴일에 언휴예요. 확장 문자 형식 wchar_t와 한글 문자 [C언어 동영상 강의]이번 강의는 확장 문자 형식 wchar_t와 한글 문자 표현을 다룰거예요.1. char 형식의 한계2. wchar_t 형식3. wchar_t 형식 크기 및 출력 함수1. char 형식의 한계이전 강의에서 char 형식은 ASCII 코드를 표현할 수 있는 문자 형식이라고 했었죠. 영문 알파벳이 아닌 한글처럼 ASCII 코드가 아닌 문자는 char 형식으로 표현하는데 한계가 있어요.한글 문자 하나를 char 형식으로 다루지 못하는 것이죠.#include //표준 입출력 헤더int main(){ char ch = 'ㄱ'; printf("%c\n", ch); return 0;}위 코드의 ..
안녕하세요. 언제나 휴일에 언휴예요. 이번 강의는 문자 형식 char와 ASCII 코드에 관해 다루기로 할게요.1. ASCII 코드와 char 형식 크기2. 숫자 문자, 소문자, 대문자 ASCII 코드 값 확인3. 문자 리터럴4. char 형식의 한계5. ASCII 코드1. ASCII 코드와 char 형식 크기 C언어는 미국에서 만들었죠. C언어의 문자 표현은 미국 표준 문자인 ASCII 코드를 표현하도록 만들었어요.ASCII , American Standard Code for Information Interchange C언어에서 문자를 표현할 때 char 형식을 사용합니다. char 형식은 미국의 표준 문자인 ASCII 코드를 표현할 수 있는 크기로 설계한 거예요. 영문 알파벳 소문자, 대문자, 숫자..
안녕하세요. 언제나 휴일에 언휴예요. 정수 형식과 표현 범위(char, short, int, long,...)[C언어 동영상 강의]이번 강의에서는 정수 형식과 표현 범위를 알아볼게요.== 다루는 내용1. 정수 형식의 종류2. 정수 형식의 메모리 크기3. 정수 형식의 표현 범위정수 형식의 종류C언어에서 제공하는 정수 형식은 다음처럼 여러 가지 정수 형식을 제공합니다.char, short, int, long, long longC언어에서 제공하는 정수 형식은 음수를 포함하지 않는 정수 형식도 제공합니다. unsigned 키워드가 붙는 형식은 모두 음수를 포함하지 않는 정수 형식입니다.unsigned char, unsigned short, unsigned int, unsigned long, …형식을 unsign..
안녕하세요. 언제나 휴일에 언휴예요. 정수 표현 및 출력 - 10진수, 8진수, 16진수 [C언어] 동영상 강의 이번 강의에서는 정수 표현과 출력을 알아봅시다.== 다루는 내용1. 정수 표현(10진수, 8진수, 16진수)2. 정수 출력 (10진수, 8진수, 16진수)3. 왜 8진수와 16진수 표현과 출력을 제공할까?1. 정수 표현(10진수, 8진수, 16진수)C언어에서 일반적인 수 표현은 당연히 10진수입니다. 8진수를 표현하려면 표현 앞에 숫자 0을 추가하세요.16진수를 표현하려면 표현 앞에 숫자 0과 알파벳 x를 추가하세요.#include //표준 라이브러리 헤더 파일#include //표준 입출력 헤더 파일int main()//프로그램 진입점{ //10진수 출력 printf("%d..
안녕하세요. 언제나 휴일입니다.자신의 정보 출력하기, puts, printf 함수 동영상 강의 첫 번째 프로그램은 자신의 정보를 콘솔 화면에 출력하는 것으로 할게요.== 다루는 내용 1. main - 프로그램의 진입점 함수2. #include //표준 입출력 헤더3. puts 함수 - 라인 단위로 출력4. printf 함수 - 개발자가 원하는 포멧에 맞게 출력1. main – 프로그램의 진입점 함수C언어로 작성한 콘솔 응용은 언제나 main함수부터 시작합니다.이러한 이유로 main 함수를 프로그램 진입점이라고 말합니다.함수 는 특정 기능을 수행할 수 있게 작성한 코드를 말합니다.이번 강의에서 출력에 사용할 putchar와 printf도 함수입니다.다음은 함수 구조입니다.자연스럽게 다룰 내용이므로 한..
C언어 시작안녕하세요. 언제나 휴일의 언휴입니다. 최근에 Python, Google Go, R언어 등 새롭게 뜨고 있죠. 그럼에도 C언어는 50년 가까이 자기 자리를 굳건히 하고 있네요.중학생이 facebook의 프로그래밍 관련 학습 그룹에 C언어 관련 학습 질문이 올라 온 것이 있었습니다. 자신은 카이스트 IT 교육센터에서 C언어 특강을 받고 있는데 어떻게 학습해 나가면 좋은지 질문하더군요.그런데 어느 한 분께서 왜 Python으로 가시지 C언어를 선택했냐고 답변을 올리더군요. 지금이라도 Python을 선택하라고 조언을 하는 것을 보고 깜짝 놀랐습니다. 아마도 그 분은 Python의 강력함에 빠지신 것 같아요. Python으로 프로그래밍 할 때 이미 제작한 라이브러리를 이용하여 필요한 것을 쉽게 만..
char * strncat ( char * dest, const char * source, size_t n ); 타겟 문자열에 부분 문자열을 합하는 함수 입력 매개 변수 리스트 dest 앞 부분의 원본 문자열이면서 합한 문자열을 설정할 버퍼 source 뒷 부분의 원본 문자열 n source 문자열에서 합할 문자 개수 반환 값 dest strncat 함수는 dest 버퍼 크기가 dest 문자 길이 + n 보다 작으면 버퍼 오버 플로우 버그가 발생합니다. C11에서는 이를 개선한 strncat_s 함수를 제공합니다. 그리고 strncat 함수에서는 문자열을 합한 맨 끝에 종료 문자를 추가합니다. 사용 예 //C언어 표준 라이브러리 함수 가이드 //char * strncat ( char * dest, con..
char * strcat ( char * dest, const char * source ); 문자열을 합하는 함수 strcat 함수, strcat_s 함수 [C언어 표준 라이브러리 함수] 입력 매개 변수 리스트 dest 앞 부분의 원본 문자열이면서 합한 문자열을 설정할 버퍼 source 뒷 부분의 원본 문자열 반환 값 dest 만약 dest 버퍼의 크기가 dest의 문자열 길이 + source의 문자열 길이 -1 보다 작으면 버퍼 오버플로우 버그가 발생합니다. C11에서는 이를 개선한 strcat_s 함수를 제공합니다. 사용 예 //C언어 표준 라이브러리 함수 가이드 //char * strcat ( char * dest, const char * source ); 문자열을 합하는 함수 #pragma war..
int strncmp ( const char * str1, const char * str2, size_t n); 부분 문자열을 비교하는 함수 입력 매개 변수 리스트 str1 비교 대상 문자열 str2 비교 대상 문자열 n 비교할 문자 개수 반환 값 같을 때 0, str1이 크면 양의 정수, str2가 크면 음의 정수 strncmp 함수는 사전식으로 문자열을 비교합니다. 사전식 비교란 앞에서 부터 비교하면서 차이가 있는 부분이 있으면 그 부분의 문자의 차이로 비교하는 것을 말합니다. 예를 들어 abcd와 abd를 비교하면 세번째 문자에서 차이가 발생하고 c가 d보다 작으므로 abcd가 abd보다 작다고 판단하는 것을 말합니다. 사용 예 //C언어 표준 라이브러리 함수 가이드 //int strncmp ( c..
strcpy 함수 [C언어 표준 라이브러이] char * strcpy ( char * dest, const char * source ); 문자열을 복사하는 함수 입력 매개 변수 리스트 dest 문자열을 복사할 버퍼 source 원본 문자열 반환 값 dest strcpy 함수에는 dest 버퍼의 크기를 전달하지 않습니다. 만약 source 문자열의 길이가 dest 버퍼의 크기-1보다 크면 버퍼 오버플로우 버그가 발생합니다. 이러한 문제를 해결하기 위해 C11에서는 strcpy_s 함수를 제공합니다. 사용 예 //C언어 표준 라이브러리 함수 가이드 //char * strcpy ( char * dest, const char * source ); 문자열을 복사하는 함수 //문자열을 복사한 후 표준 출력 스트림에..
strlen 함수 [C언어 표준 라이브러리] size_t strlen( const char * str ); 문자열 길이를 구하는 함수 입력 매개 변수 리스트 str 문자열 반환 값 문자열 길이 문자열 길이를 구하는 strlen 함수는 거짓인 문자(널 문자, ‘\0’, 아스키 코드값 0)을 만날 때까지의 문자의 개수를 반환합니다. 한글 하나의 문자는 2개의 문자로 표현합니다. 사용 예에서는 strlen 함수를 사용하는 예제 코드를 포함하여 strlen 함수와 같은 동작을 하는 ehstrlen 함수를 볼 수 있습니다. 이처럼 라이브러리 함수의 내부를 이해하기 위해 같은 동작을 하는 함수를 만들어 보는 것도 나쁘지 않습니다. 사용 예 //C언어 표준 라이브러리 함수 가이드 //size_t strlen( con..
헤더에는 문자열에 관한 여러 가지 함수와 매크로와 형식을 제공하고 있습니다. 이 책에서는 헤더에서 제공하는 함수 중에 다음 22개 함수 사용법을 소개합니다. size_t strlen( const char * str ); 문자열 길이를 구하는 함수 char * strcpy ( char * dest, const char * source ); 문자열을 복사하는 함수 erron_t strcpy_s ( char * dest, size_t size, const char * source ); 문자열을 복사하는 함수 char * strncpy ( char * destination, const char * source, size_t n ); 부분 문자열을 복사하는 함수 errno_t strncpy_s ( char * d..
int fsetpos ( FILE * fp, fpos_t * pos ); 파일 스트림의 파일 position을 설정하는 함수 입력 매개 변수 리스트 fp 파일 스트림 pos 설정할 파일 position 값이 있는 메모리 주소 반환 값 요청한 파일 position으로 설정하지 못할 때만 0이 아닌 정수 사용 예 //C언어 표준 라이브러리 함수 가이드 //int fsetpos ( FILE * fp, fpos_t * pos ); 파일 스트림의 파일 position을 설정하는 함수 //회원 데이터를 파일에 출력한 후 닫고 찾고자 하는 순서 번호를 입력받아 회원 정보를 출력 #include #define MAX_NAME_LEN 20 typedef struct { char name[MAX_NAME_LEN + 1];..
int fgetpos ( FILE * fp, fpos_t * pos ); 파일 스트림의 파일 position을 구하는 함수 입력 매개 변수 리스트 fp 파일 스트림 pos 파일 position을 읽어올 메모리 주소 반환 값 성공 시 0, 실패 시 0이 아닌 수 fpos_t 형식은 64비트 정수로 매우 큰 (2의 63승 -1 바이트) 파일에서의 파일 position을 확인할 수 있습니다. 다음의 사용 예는 4G파일을 만든 후에 파일 position을 확인하는 코드입니다. 테스트 후에 data.txt 파일을 지우세요. 사용 예 //C언어 표준 라이브러리 함수 가이드 //int fgetpos ( FILE * fp, fpos_t * pos ); 파일 스트림의 파일 position을 구하는 함수 //커다란 파일을..
void clearerr(FILE * fp); 파일 스트림의 에러 플래그를 지우는 함수 입력 매개 변수 리스트 fp 파일 스트림 반환 값 없음 clearerr 함수는 error 지시자와 end of file 지시자를 지워줍니다. 사용 예 //C언어 표준 라이브러리 함수 가이드 //void clearerr ( FILE * fp ); 파일 스트림의 에러 플래그를 지우는 함수 //쓰기 모드로 파일을 열고 fgetc 호출 시 에러를 출력하고 에러를 지운 후에 다시 출력 #include int main (void) { FILE * fp; int re,no; fopen_s (&fp,"data.txt","w");//쓰기 모드로 파일 열기 if (fp==NULL) { perror ("error fopen"); retu..
void perror ( const char * str ); 에러 메시지를 출력하는 함수 입력 매개 변수 리스트 str 출력할 문자열 반환 값 없음 perror 함수는 입력 인자로 전달한 문자열 뒤에 : 과 함께 최근에 발생한 에러 메시지를 출력합니다. 사용 예 //C언어 표준 라이브러리 함수 가이드 //void perror ( const char * str ); 에러 메시지를 출력하는 함수 //존재하지 않는 파일을 읽기 모드로 열었을 때 에러 메시지 출력 #include int main (void) { FILE * fp; fopen_s (&fp,"noexist.txt","r");//읽기 모드로 파일 열기 if (fp==NULL) { perror ("error fopen");//에러 메시지 출력 retu..