전체 글957 [ C언어 ] 프로젝트 : 이중 연결 리스트로 구현한 도서 관리 프로그램 - (6) - 링크드 리스트와 삽입 정렬 , 함수포인터 , 노드 삭제 , 메모리 할당 해제 이어서 이중 연결 리스트로 구현한 도서 관리 프로그램의 노드 삭제, 삽입정렬, 메모리 할당해제 기능 등을 소개한다. 2022.05.02 - [Language/C] - [C언어] 프로젝트 : 이중 연결 리스트로 구현한 도서 관리 프로그램 - (5) - 링크드 리스트와 파일 입출력, 노드 추가 깃허브 주소 : https://github.com/joeteo/BookManager_C GitHub - joeteo/BookManager_C: Book Mangager program in C Book Mangager program in C. Contribute to joeteo/BookManager_C development by creating an account on GitHub. github.com void del.. 2022. 5. 3. [ C언어 ] 프로젝트 : 이중 연결 리스트로 구현한 도서 관리 프로그램 - (5) - 링크드 리스트와 파일 입출력 , 노드 추가 도서 관리 프로그램 개선 5탄이자 마지막. 자료구조를 기존의 배열에서 이중 연결 리스트(Doubly Linked List)로 바꾸었다. 2022.04.25 - [Language/C] - [C언어] 프로젝트(삽질일기) : 도서 관리 프로그램 - (4) - 파일 입출력 - fopen/fopen_s, .bin 바이너리 파일 읽기/쓰기 이건 개선이라기보다 거의 새로 짜는거에 가까웠다..프로젝트 처음 시작할때 자료구조를 먼저 결정하고 ADT를 정의하는 것의 중요성을 체감한다. 참고로 이중 연결 리스트는 헤드/테일 더미노드가 있고 꼬리쪽에 삽입하는 버전이다. 사실 처음에는 진짜 제일 간단한 단순 연결 리스트(Single Linked List)로 구현하려고 했었는데 여기까지 온 이유가 있다. 내가 프로그램을 만들면서.. 2022. 5. 2. [ Visual Studio ] CRT 라이브러리로 메모리 누수 탐지하기 Visual Studio에서 CRT 라이브러리를 사용해 메모리 누수 탐지하는 방법 1. 소스 상단에 아래 지시문을 포함한다. #define _CRTDBG_MAP_ALLOC #include #include 2. 종료지점 직전에 아래 코드를 추가한다. _CrtDumpMemoryLeaks(); 3. F5를 눌러 디버그 모드로 실행 후 종료한다. 테스트를 위해 어떤 함수안의 free를 주석처리하고 디버그 모드로 실행한 뒤 그 함수를 호출하고 종료해보았다. 아래와 같이 메모리 누수가 감지되었다고 뜬다. 나는 테스트해본거라 어느위치에서 누수가 된건지 알고있지만 모르겠다면 4. 메인함수 안쪽 상단에 아래 코드를 넣고 매개변수로는 위에서 본 번호인 111을 넣은 뒤 디버그 모드로 다시 실행한다. _CrtSetBreak.. 2022. 5. 2. [ C언어 ] realloc은 얼마나 자주 메모리 주소를 옮길까? realloc함수에 대한 설명을 찾아보면 다음과 같은 과정으로 작동한다고 한다. 1. 동적할당된 메모리 크기를 변경해 재할당함 (기존 주소일수도 있고, 새로운 주소일 수도 있음) 2. (새로운 주소에 할당한 경우) 기존 주소에 있던 값을 새로운 주소에 복사하고 원래 주소는 할당해제함 얼마나 많이 메모리 주소를 옮겨갈까 궁금해서 아래 코드로 테스트를 해보았다. #define _CRTDBG_MAP_ALLOC #include #include #include #include int main(void) { int arraysize = 10; int i = 0; char* test = (char*)malloc(sizeof(char) * arraysize); int plus = 10; float chk = 0; fo.. 2022. 5. 2. [ 아두이노 ] I2C LCD로 문자 출력 + 한 칸 씩 옆으로 이동 + 커스텀으로 한글 출력 + 타이머 출력 원리 LCD(Liquid Crystal Display)는 액정표시장치로 스스로 발광하지 않기 때문에 후면에 백라이트가 있고, 전면에 있는 액정에 전기적 신호를 가해 빛을 통과시키거나 차단하는 방식으로 문자를 표시한다. 다양한 규격이 있는데 보통 아두이노와는 16×2 character LCD 를 주로 사용하고 기존의 LCD는 핀이 너무 많아 사용에 불편함이 있었기 때문에 아래 사진과 같은 I2C모듈이 뒤에 납땜된 형태로 판매된다. 1행에 16문자 x 2행, 총 32문자를 표현할 수 있다. 1문자는 5x8의 픽셀 그리드에 의해 표현된다. 혹시 작동이 안된다면 1. 왼쪽의 백라이트 점퍼가 잘 꼽혔는지 확인해보자. 저게 접지되어있어야 Backlight On이 된다. 2. 파란색 가변저항에 드라이버를 넣고 돌려서.. 2022. 5. 2. [ 아두이노 ] 초음파센서로 측정한 거리를 LCD 화면에 표시하기 준비물아두이노초음파센서I2C LCD모듈점퍼선브레드보드등 회로 코드#define trigPin 8#define echoPin 9#include #include "NewPing.h" // 헤더 포함LiquidCrystal_I2C lcd(0x27,16,2);NewPing sonar(8, 9);void setup(){ lcd.init(); // lcd 객체 초기화 lcd.clear(); // 화면 지우고 커서를 왼쪽 상단 모서리로 옮김 lcd.backlight(); // 백라이트 온 lcd.setCursor(0,0); // 0행 0열로 커서 옮김 lcd.print("Distance in cm : "); // 문자 출력 }void loop(){ float duration = sonar.p.. 2022. 5. 2. [ C언어 ] scanf의 리턴값 놀랍게도 scanf에는 리턴값이 있다. 함수가 읽어들여 저장에 성공한 데이터 개수가 반환값이다. 예를들어 위의 경우에는 정수 2개를 b, c 변수에 저장하는데 성공했으므로 리턴값이 2이다. 정수를 입력해야하는데 문자를 입력한 경우 변수 b, c에 저장하는것 둘 다 실패했으므로 리턴값이 0 변수 b에 저장하는 것만 성공했으므로 리턴값이 1 그런데 순서를 바꿔서 a 1 을 입력하면 scanf의 리턴값이 0이다. 이는 변수 b에 저장되지 못한 문자들(개행문자 포함)이 입력버퍼에 남아 그 다음 입력을 방해하니 변수 c에 저장하는 것 또한 실패한 것이다. 이에대한 해결방법 링크 : https://eteo.tistory.com/33 scanf, scanf_s "%d"로 정수 입력 받으려다 문자(열)이 잘못 들어왔을.. 2022. 4. 27. [ C언어 ] scanf 공백 ( 띄어쓰기 ) 포함 원하는 길이 만큼만 문자열 입력 받는 방법. 공백을 포함해서 입력받는 동시에, 배열의 길이를 넘는 입력이 들어오더라도 오류가 나지 않고 지정된 길이 만큼만 변수에 저장되는 받는 방법을 소개한다. 첫번째 방법 1. "%숫자[^\n]" #include int main(void) { char str[20]; printf("도서 이름을 입력하세요 :"); scanf_s("%20[^\n]", str, sizeof(str)); //fgets(str, 19, stdin); printf("입력하신 도서이름은 %s 입니다.\n", str); return 0; } 예를들어 char 배열의 크기가 20인 경우, null문자가 들어갈 공간을 생각해서 그보다 작은 숫자를 지정해주면 아무리 입력이 많이들어와도 딱 그 길이 만큼만 배열에 저장된다. 한글의 경우 2바이트를 차.. 2022. 4. 27. scanf , scanf_s " %d "로 정수 입력 받으려다 문자(열)이 잘못 들어왔을 때 무한루프에 빠지는 문제 / 문장 씹히는 문제 해결 사용자가 꼭 우리가 기대한대로 입력하라는 법이 없으니 이러한 예외처리도 필요하다. scanf, scanf_s %d로 정수 입력 받으려다 문자나 문자열이 들어왔을 때 무한루프에 빠지는 문제 혹은 다음 문장이 씹히고 그 다음으로 넘어가는 문제의 해결책은 동일하다. 입력버퍼를 비워주면 된다. scanf 함수는 %d 정수형을 입력받기 위해 대기하고 있었는데 문자/문자열이 들어오니 값을 대입하지 못하고 그게 입력스트림에 계속 남아서 문제를 일으키는 것이다. 입력 버퍼를 비우는 방법으로 구글링을 해보면 다음과 같은 방법이 나온다. 1. fflush(stdin) -> 사용X fflush 함수는 원래 출력버퍼를 비우는 용도이기에 사용하지 말라고 함. (출처 : C언어 열혈 프로그래밍 책) 2. rewind(stdin).. 2022. 4. 27. [ C언어 ] enum 의 활용 + 사용예제 열거형 enum은 관련이 있는 정수형 상수의 집합으로 typedef로 별칭을 정의하면 더욱 편리하게 사용 가능하다. 간단한 예제 #include typedef enum { FALSE, TRUE }boolean; typedef enum { MALE =1, FEMALE }gender; int main(void) { boolean exit=FALSE; char answer; while (exit == FALSE) { printf("성별을 입력하세요(1.남자, 2.여자):"); scanf_s("%hhd", &answer); rewind(stdin); if (answer == FEMALE) { printf("여자입니다.\n"); } else if (answer == MALE) { printf("남자입니다.\n").. 2022. 4. 26. 이전 1 ··· 91 92 93 94 95 96 다음