[C언어 강좌] #17-3 콘솔 입출력과 파일 입출력

프로그래밍 강좌/C 2022. 1. 17. 02:16

안녕하세요 파일입니다. 저번에 이어 파일 입출력을 하는 방법에 대해 계속 알아봅시다! 콘솔 입출력과 파일 입출력편은 오늘이 마지막입니다. 달려보아요~ fread() 함수와 fwrite() 함수 3번째 이야기 하는것이지만 파일은 텍스트 파일과 바이너리 파일로 나누어진다고 했습니다. 지금까지 앞에서 학습한 함수들은 전부 텍스트모드에서 작동합니다. 지금까지 배운 함수들론 순수한 이진파일 (0과 1로만 이루어진)을 적어낼 수 없습니다. 텍스트 모드로 적히기 때문에 텍스트만 적을 수 있죠. 그러나 바이너리로 읽기/쓰기를 할 수 있는 함수를 배우면 달라집니다. $cf ) binary : $ 2진법의 이제 바이너리 파일의 파일 입출력을 지원하는 함수를 다뤄봅시다. 이들에는 fread() 함수와 fwrite() 함수가..

Article Thumbnail
[C언어 강좌] #17-2 콘솔 입출력과 파일 입출력

프로그래밍 강좌/C 2022. 1. 13. 01:02

저번 편에선 파일 출력을 하는 소스를 간단하게 실습해보았고 스트림, 파일스트림에 대한 개념 fopen() 을 통해 파일 스트림을 생성 & 파일을 여는것 등을 알아보았습니다. 오늘은 파일 입출력 과정에서 사용되는 함수에 대해 다뤄보겠습니다. fopen() 함수와 fclose() 함수 먼저 파일을 열고 닫는 fopen() 함수와 fclose() 함수에 대해서 공부해보겠습니다. 아래 표는 fopen 함수의 원형입니다. 함수 원형 설명 #include FILE* fopen(const char * filename, const char * mode) 파일 스트림을 생성하고 파일을 연다 실패 : NULL 반환 fopen() 함수는 함수의 인자로 filename(파일 경로)과 mode(파일 열기 모드)를 전달 받아 파..

Article Thumbnail
[C언어 강좌] #17-1 콘솔 입출력과 파일 입출력

프로그래밍 강좌/C 2022. 1. 8. 23:05

안녕하세요 파일입니다. 오늘은 본격적으로 파일 입출력에 대한 이론과 간단한 예제를 다뤄볼겁니다. 참고로 이번편부터 새롭게 알아야할 개념들이 늘어서 포인터 편처럼 머리가 아파질 수 있습니다.. 개인적인 느낌으로는 포인터의 경우 개념은 알만했는데 응용이 어렵다면 여긴 개념은 어려운데 응용하는건 그리 어렵지 않습니다. C언어에 대한 고지가 얼마 남지 않았으니 조금만 힘내봅시다. 화이팅! 콘솔 콘솔(console)은 본래 대형 컴퓨터 시스템과 연결되어 데이터를 입력하는 장치 또는 입력된 데이터를 처리하여 결과를 출력하는 장치를 의미합니다. 여기서의 콘솔은 키보드나 모니터와 같은 표준 입출력 장치를 의미하며, 콘솔 입출력은 키보드에서 데이터를 입력받고 모니터에 데이터를 출력하는것을 말합니다. 그렇다면 파일 입출력..

Article Thumbnail
[C언어 강좌] #16-2 문자열 표준 함수와 기타 표준 함수

프로그래밍 강좌/C 2022. 1. 4. 00:51

sscanf() 함수와 sprintf() 함수 우리가 지금까지 C언어에서 필수적으로 사용해온 함수로 scanf() 함수와 printf() 함수가 있습니다. 이번에 알아볼 함수는 scanf()와, printf() 함수 이름 앞에 s를 붙인 sscanf() 함수와 sprintf() 함수 입니다. 함수 원형 설명 #include int sscanf(const char * s1, const char * s2, ...) 메모리(문자열)에서 데이터를 입력받음 성공 : 데이터의 개수 반환 #include int sprintf(const char * s1, const char * s2, ...) 메모리(문자열)에 데이터를 출력(저장) 성공 : 문자열의 길이 반환 *위 함수의 인자중에 ...은 함수의 인자가 많이 있을 ..

Article Thumbnail
[C언어 강좌] #16-1 문자열 표준 함수와 기타 표준 함수

프로그래밍 강좌/C 2022. 1. 3. 03:35

이전에 문자열에 대해 배운적이 있습니다. 프로그램을 만들면서 문자열을 다루는 상황이 많게 되므로 문자열은 상당히 유용한데요. C언어에서 문자열을 구현하는 방법 2가지 다시 리마인드하고 넘어가자면 "Hello" 라는 문자열이 있다면 1. 배열을 통한 문자열 char string[] = "Hello" 와 같은 형식으로 선언하고 각 배열 요소 string[0] = 'H', string[1] = 'e'.. string[5] = '\0' (널문자)가 문자인 것으로 구현됩니다. 2. 포인터를 통한 문자열 char * string = "Hello" 와 같은 형식으로 선언하고 "Hello"라는 문자열이 메모리 공간에 할당되며 string이라는 char형 포인터 변수가 "Hello"라는 문자열의 시작주소를 가리켜서 1바..

Article Thumbnail
[C언어 강좌] #15 공용체와 열거형

프로그래밍 강좌/C 2021. 12. 28. 19:02

안녕하세요 파일입니다. 저번 구조체편에 이어서 공용체와 열거형입니다. 구조체를 제대로 이해하셨다면 이번에 새로배우는 공용체는 구조체와 사용방법이 거의 동일하기 때문에 어렵지 않게 익힐 수 있습니다. 또한 열거형도 그렇게 어려운 내용은 아니니 걱정하지 않으셔도 됩니다. 그럼 바로 시작해봅시다. 공용체 앞에서 배운 구조체처럼 사용자 정의 자료형에는 또 '공용체' 라는것이 있습니다. 공용체는 선언 형태와 사용 형태가 구조체와 거의 동일합니다. 그럼 공용체는 무엇일까요? 공용체의 의미는 그룹으로 묶여진 여러 개의 멤버 변수들 중에 가장 큰 메모리 공간을 '공유' 해서 사용하는 것 입니다. 밑줄쳐진 저 공유한다는 부분이 구조체와의 매우 큰 차이점이라고 할 수 있겠습니다. 단순히 말로만은 이해가 어려으므로 그림을 ..

Article Thumbnail
[C언어 강좌] #14-2 구조체(Structure Type)

프로그래밍 강좌/C 2021. 12. 28. 02:25

포인터편에서 함수를 호출할때 두가지 방법인 값에 의한 호출(Call by Value), 주소에 의한 호출(Call by Reference) 를 배웠었습니다. 일반 변수의 값, 주소를 매개변수로 넘길 수 있었듯 구조체의 경우에도 구조체 변수의 값, 주소를 매개변수로 넘길 수 있습니다. 그리고 배열의 경우에는 배열을 매개변수로 넘길때 배열의 이름 자체가 주소고, 매개변수로 int a[]와 같이 써줘도 컴파일러에서 int * a와 같은 포인터로 자동변환하기 때문에 어떻게하든 주소에 의한 호출만 가능했었는데요. 과연 구조체는 여기서 어떻게 될까요? 한번 알아보겠습니다. 구조체 변수를 이용한 값에 의한 호출 #include struct pos { int x; int y; }; void CallbyValue(str..

Article Thumbnail
[C언어 강좌] #14-1 구조체(Structure Type)

프로그래밍 강좌/C 2021. 12. 23. 00:44

안녕하세요 파일입니다. 드디어 지겹던 포인터가 끝나고 새로운 강좌명으로 상쾌한 시작을 할 수 있게 되었습니다 ! * 하지만 포인터는 포인터가 끝난뒤에도 항상 어디서나 등장합니다.. 여기서도 나와요 오늘 배워볼것은 구조체(Structure Type)입니다. 만약에 '학생1' 이 있고 이름이 '홍길동' 이라면 이것을 프로그래밍으로 표현할때 어떻게 하면 좋을까요? #include int main(){ char * student1 = "홍길동"; printf("학생 1의 이름은 : %s 입니다.", student1); return 0; } 저번에 배운 포인터 문자열을 활용하면, 대충 이렇게 하면 되겠죠? 근데 학생을 관리하려면 이름만 알아선 부족합니다. 예를 들어서 학번도 있을꺼고, 고등학생이라면 학년, 반도 ..

Article Thumbnail
[C언어 강좌] #13-3 포인터(Pointer)

프로그래밍 강좌/C 2021. 11. 23. 00:58

안녕하세요 파일입니다. 포인터 3편을 시작하겠습니다. 포인터는 기본적으로 배울것도 많고, 어렵고, 힘이 듭니다 ㅠ 저도 작성하는 내내 고역이네요.. 그래도 다행인건 포인터 편은 이번이 마지막입니다! 힘내보자구요 (아 참고로 썸네일은 포인터라고 치면 나오는 개를 사용했습니다. 아무 의미 없고 어그로 용이니 무시해주세요 ㅋㅋ) #include int main(){ int a = 0; scanf("%d", &a); printf("%d", a); return 0; } 지금까지 C언어로 입력을 받으면서 printf로 출력할땐 안그랬는데 scanf로 입력받을때는 항상 &a처럼 앞에 &(앰퍼샌드) 기호를 붙였었습니다. 주소로 값을 넘겨야만 했습니다. 이건 나중에 설명하겠다고만 했지 이유도 몰랐고 그냥 외워서 쓰는 수..

Article Thumbnail
[C언어 강좌] #13-2 포인터(Pointer)

프로그래밍 강좌/C 2021. 11. 7. 22:03

안녕하세요 파일입니다. 저번 강의에 이어서 포인터 2번째 시간입니다. 바로 시작해보겠습니다! 포인터와 2차원 배열 &연산자와 *연산자로 2차원 배열을 공부하던것 기억나시나요? 1차원 배열일때는 &array[0]을 하면 첫번째 주소의 값을 가르켰었습니다. 2차원 배열일때는 조금 달랐죠. *(array + 0) == array[0] 이며 이것은 곧 0행의 대표주소 &array[0][0] 이였습니다. 1행의 대표주소는 *(array + 1) == array[1] 이며 이것은 곧 1행의 첫번째 요소의 주소 &array[1][0] 가 되었습니다. 포인터를 이용한 2차원 배열 탐색 #include int main(){ int arr[3][4] = { //3행 4열 {1,2,3,4}, {5,6,7,8}, {9,10,..

Article Thumbnail
[C언어 강좌] #13-1 포인터(Pointer)

프로그래밍 강좌/C 2021. 6. 28. 20:18

안녕하세요 파일입니다. 앞에서 다차원 배열을 다룬 뒤로 거점 한 달쯤에 뵙네요! 앞의 연도가 바뀐 건 기분 탓입니다 ㅎㅎ.. 가 아니고 저 글을 작성하고 많이 바빠졌는데 까먹고 강의를 강제 동면시켜버렸습니다 죄송합니다 ㅋㅋ.. 그래도 제 강의 봐주시는 분들이 꽤 있었는데 이미 다른 강의로 도망가버린 거 같아요.. 그래도 꽤나 많은 부분을 공부했으니 스스로 잘하시고 계시겠죠 ㅎㅎ? 어쨌든 C언어 개념에 고지가 얼마 남지 않았습니다! 오늘 배울 것은 포인터입니다! C언어가 Low-Level에 가깝다고 표현하는 이유가 바로 C언어에 존재하는 포인터 때문입니다. 포인터는 일종의 흑마법에 가까운데 일단 이해하긴 어렵고 위험하나 완벽히 이해한다면 거의 모든 것을 할 수 있습니다. 사실 이런 설명을 들으면 무슨 개소..

Article Thumbnail
[C언어 강좌] #12-2 [Array] 다차원 배열

프로그래밍 강좌/C 2020. 5. 17. 21:32

안녕하세요. 오늘은 앞에서 배운 1차원 배열에 이어 다차원 배열을 보겠습니다. 저희는 3차원 세계에 살고 있습니다. 그렇기 때문에 4차원을 이해할 수 없죠. 1차원은 선분, 2차원은 면, 3차원은 입체라고 합니다. 배열을 만들땐 1차원을 넘어 2차원, 3차원, 4차원,..., n차원 배열까지 만들 수 있습니다. 사실 4차원부턴 사용할 일이 그렇게 많지 않습니다. (AI 라던가, 테트리스 라던가..) 그렇기에 다차원 배열은 대개 3차원 까지를 가리킵니다. 물론 다차원 배열은 2차원 배열 이상을 가리키므로 4차원, 5차원을 다차원 배열이라고 불러도 무리가 없습니다. '다차원 배열'이라고 이름 붙은 이유는 인간의 논리인 1차원, 2차원, 3차원을 배열에 적용시켜서 이해하기 위함입니다. 다음 사진은 2차원 배열..

Article Thumbnail
[C언어 강좌] #12-1 [Array] 1차원 배열

프로그래밍 강좌/C 2020. 3. 30. 22:04

안녕하세요 파일입니다. C언어 강좌는 굉장히 오랜만이네요.. 제가 학업에 치이기도 했고 귀찮음이 앞서기에 강좌를 너무 늦게 작성했네요 ㅠㅠ 사실 50% 정도 글을 작성하고 임시저장을 해뒀는데 이어서 작성하려고 보니 글이 통째로 날아가서 멘붕을 조금 했습니다;; 티스토리 임시저장은 네이버에 비하면 너무 부족한거같아요 ㅠㅠ 어쨌든 제 강의를 읽어주시는 분들이 있기에 다시 강의를 작성하게 됬습니다. 오늘 배워볼 것은 배열입니다~ 여기까지 오신 분들은 사실 C언어를 60% 정도는 배웠다고 해도 괜찮죠 ㅎㅎ 참고로 배열은 시각적으로 이해하는 것이 좋기 때문에 최대한 그림을 추가해서 설명해보겠습니다. 또한 난이도가 올라가는 부분이기 때문에 편한 마음으로 시청하시길 권장드립니다. (물론 대충 보라는 뜻은 아니고요....

Article Thumbnail
[C언어 강좌] #11 정적변수, 지역변수, 전역변수, 외부변수, 레지스터 변수

프로그래밍 강좌/C 2020. 1. 28. 01:47

물론 변수는 여기서 배웠는데 왜 또배우나요? 라고 할 수 있습니다. 하지만 저번에 배웠던 변수에 대한 내용들은 기초적인 내용이고, 오늘은 그 변수가 메모리에 언제 생성되고, 언제 소멸되는지, 선언되는 위치, 종류에 대해 심화학습을 해볼것입니다. 우선 오늘 알아볼 변수는 총 5가지 입니다. 지역변수 (local) 전역변수 (global) 정적변수 (static) 외부변수 (extern) 레지스터 변수 (cpu) 종류가 많아보이지만 쫄 필요는 없습니다. 그럼 시작해보겠습니다. 지역변수 지역변수(Local Variable)는 중괄호 내부, 함수의 매개변수(Parameter)에서 사용되는 변수를 의미합니다. 중괄호 밖, 함수의 밖에선 그 효력을 발휘할 수 없습니다. 지역변수에서 지역은 중괄호 내부, 함수의 내부..

Article Thumbnail
[C언어 강좌] #10 함수(Function)

프로그래밍 강좌/C 2020. 1. 18. 00:50

안녕하세요 파일입니다. 오늘은 반복 작업을 편하게 해주는 함수에 대해 알아보겠습니다. 시작에 앞서 강의가 벌써 10강까지 제작되었습니다. 끝까지 열심히 따라 해 봅시다. 메인 함수 #include int main(){ //main 함수 정의 printf("Hello C World"); return 0; } #2강에서 main() 함수에 대해 소개한 적이 있습니다. 기억나시나요 ^^ 항상 프로그램 작성할 때마다 int main() 요건 습관처럼 써줬습니다 main 함수는 이름 그대로 프로그램이 실행될 때 가장 먼저 실행되는 "함수"입니다. 그럼 이제 다른 함수를 만들어보겠습니다 함수의 정의 함수는 왜 필요할까요? 아래 코드를 한번 봅시다. #include int main(){ //main 함수 정의 int..

Article Thumbnail
[C언어 강좌] #9 조건문 (If, ElseIf, Switch)

프로그래밍 강좌/C 2020. 1. 8. 19:48

안녕하세요. 파일입니다 오늘 알아볼 것은 조건문입니다. 조건문은 따로 알아보진 않았지만 앞에서 자연스럽게 사용을 했습니다(If문) 오늘은 If문 이외에도 다른 조건문들을 알아보고 사용법을 알아보겠습니다. If문 #include int main(){ if(조건){ 실행식 } return 0; } If라는 영어단어의 뜻은 '만약'입니다. 프로그래밍에서 if 역시 조건을 따지는 데 사용합니다. 위는 if문의 사용예제입니다. if(조건)이고 조건 안의 값이 참이면 중괄호 안의 코드가 실행됩니다. #include int main(){ int n; printf("숫자를 입력해주세요 : "); scanf("%d", &n); if(n % 2 == 0) printf("짝수입니다"); return 0; } >>> 10 1..

Article Thumbnail
[C언어 강좌] #8 반복문(For, While, Do~While, 무한루프, 중첩)

프로그래밍 강좌/C 2019. 12. 23. 21:52

안녕하세요 파일입니다. 오늘 알아볼 것은 반복문입니다. 컴퓨터는 우선 막일을 잘합니다. 1~1000까지 다 더하려면 가우스 합공식을 이용하는 게 사람, 컴퓨터 둘 다에게 빠르나 컴퓨터는 반복 작업을 통해 1~1000까지 모두 더하는 게 가능합니다. For문, While문은 프로그래밍에서 반복처리를 할 때 100% 활용하기 때문에 꼭 알아두시는 게 좋습니다. 다른 프로그래밍 언어를 하셨더라면 C언어에서 for, while의 사용 방식도 거의 동일합니다. While문 while문은 조건이 참인동안 반복입니다. 사용 방법은 다음과 같습니다. while(조건) { 반복 내용 } 조건이 참 일동 안 만 반복하기 때문에 약간 헷갈릴 수는 있습니다만 그때그때 잘 생각하면 됩니다. 아래 예제를 봅시다. #include..

Article Thumbnail
[C언어 강좌] #7-2 자료형(Data Type)

프로그래밍 강좌/C 2019. 11. 24. 15:57

실수형 실수형 크기 범위 float 4바이트 32비트 1.175494e-038 ~3.402823e+038 double 8바이트 64비트 2.225074e-308 ~1.797693e+308 long double 8바이트 64비트 2.225074e-308~1.797693e+308 실수형 데이터를 저장하는 변수의 자료형은 실수형입니다. 실수형의 종류에는 float, double, long double 등이 있습니다. 정수형과 마찬가지로 실수형도 최대, 최솟값을 구하는 시스템 라이브러리가 있습니다. 전처리기에서 를 include 해주세요. #include #include int main(void){ printf("float의 최소값 : %e, 최대값 : %e \n", FLT_MIN, FLT_MAX); print..

[C언어 강좌] #7-1 자료형(Data Type)

프로그래밍 강좌/C 2019. 11. 19. 22:43

안녕하세요 파일입니다. 이전 강의에서 정수형은 int형, 실수형은 float형이라고 다룬 적이 있었죠? 자료형에 관한 표도 봤었구요. 그런데 자료형이 뭘까요? 앞에서 변수를 배웠습니다 그렇죠? 변수는 선언할 때 int a 처럼 앞에 데이터를 저장할 형식을 지정해줍니다. 이것이 자료형입니다. 자료형이란 변수의 저장하는 데이터의 형식입니다. 정수를 저장하고 싶다면 int, long, char 등을 사용하구요 실수를 저장하고 싶다면 float, double, long double 등을 사용합니다. 각 자료형에는 할당되는 메모리의 크기가 있습니다. 이것은 sizeof 함수를 이용해 구할 수 있습니다. #include int main(void){ //정수형 char n1 = 5; short n2 = 10; int..

Article Thumbnail
[C언어 강좌] #6-2 연산자(Operator)

프로그래밍 강좌/C 2019. 11. 15. 15:53

논리 연산자 논리 연산자는 && 와 || 와! 가 있습니다. AND 연산자 (&&) 피연산자 피연산자 결과값 1 1 1 1 0 0 0 1 0 0 0 0 AND 연산자는 피연산자가 모두 참(1) 일 때 참을 반환합니다. AND 연산자의 의미는 논리곱입니다. 수학의 집합으로 생각하면 교집합의 개념입니다. OR 연산자 ( || ) 피연산자 피연산자 결과값 1 1 1 1 0 1 0 1 1 0 0 0 OR 연산자는 피연산자 중 하나가 참이면 참을 반환합니다. OR 연산자의 의미는 논리합입니다. 수학의 집합으로 생각하면 합집합의 개념입니다. #include int main(){ int a = 10; int b = 5; printf("%d 가 %d 보다 큰가 ? : %d \n", a,b , a > b); printf..

Article Thumbnail