Software/C언어 (11) 썸네일형 리스트형 PID 제어 #include // PID 구조체 정의typedef struct { double Kp; // 비례 상수 double Ki; // 적분 상수 double Kd; // 미분 상수 double prev_error; // 이전 오차 double integral; // 적분 값} PIDController;// PID 초기화 함수void PID_Init(PIDController *pid, double Kp, double Ki, double Kd) { pid->Kp = Kp; pid->Ki = Ki; pid->Kd = Kd; pid->prev_error = 0.0; pid->integral = 0.0;}// PID 계산 함수double PID_Comp.. [C언어] unsigned 자료형 사용 시 주의사항 unsigned 두 변수를 빼는 연산을 통해 결과가 음수가 나온 값을 다시 unsigned 변수에 넣으면 0이 저장될 거라고 생각했는데, 실제로 해보니 0이 아니고 언더플로우가 발생하여 결과 출력됨 #include int main(void) { // your code goes here unsigned int a = 10; unsigned int b = 15; unsigned int result = 0; result = a - b; printf("result = %u\r\n", result); return 0; } [출력] result = 4294967291 그러므로 결과값이 음수가 나올 확률이 있다면, unsigned 자료형으로 하지 않아야 한다. 해결방법은 조건문을 거쳐서 0을 도출함. unsigned.. [C언어] 문자열 입출력 함수 문자열 = 문자 배열 문자열의 끝은 NULL. 따라서 TEST라는 문자열을 저장하기 위해서는 최소 5바이트 이상의 메모리가 필요. T . E . S . T . NULL 이 저장될 수 있어야 함. 문자 하나씩이 아니라 전체 문자열을 통째로 반환한다. gets() 함수는 보안에 취약. 따라서 gets() 대신 gets_s() 함수를 사용하는 것을 권장 문자열을 출력하는 함수 #include void main(void) { char szBuffer[128] = { 0 }; // 문자열 저장을 위해 요소 개수가 128인 char형 배열 szBuffer 선언 printf("Input your name: "); gets(szBuffer); // 사용자가 키보드로 입력한 문자열을 배열 szBuffer에 저장 prin.. [C언어] 기본 입출력 함수 * 문자 입출력 함수 - 라이브러리 = 함수들을 모아놓은 집합 - SDK(Software Development Kit) = 개발하는 데 도움이 되는 각종 함수를 모아놓은 라이브러리 + 몇몇 개발 도구 => 하나의 패키지로 묶은 개발환경 - getchar() 함수 : 사용자가 키보드로 입력한 문자 혹은 문자열에서 한 글자를 읽어서 반환 표준입력장치(키보드)의 입출력 버퍼에서 문자를 읽어옴. 버퍼에 문자가 채워져 있다면 문자를 읽어서 반환, 비어있다면 키보드 입력을 기다린다. - putchar() 함수 : 문자를 모니터 화면에 출력하는 함수 결국, 두 함수는 각각 문자의 입력과 출력 기능 제공 ex) #include void main() { char ch; ch = getchar(); putchar(ch);.. [C언어] visual studio 기본 사용법 - 빌드 단축키 : F7 - 오류 위치 찾기 단축키 : F4 - 위치 중단점(Break Point) : 해당 행에서 F9 - 실행 : Ctrl + F5 / 디버그모드 실행 : 그냥 F5 - 메모리 창 : Ctrl + Alt + M -> 1 ~ 4 선택 [C언어] #include 의 " " 와 < > 의 차이 #include #include "aaa.h" - 은 standard library header에 사용 - " " 은 user defined header에 사용 [C언어] 변수 int형의 크기는 4바이트이므로 100 ~ 103번지를 하나로 묶어서 해석. 변수의 이름은 위의 4바이트 메모리를 nData라는 이름 부여 => nData에 10을 넣으라는 명령은 100 ~ 103번지의 메모리에 10을 저장하라는 뜻 10을 32비트로 맞추면 0x0000000A => 메모리에 00 00 00 0A 로 나누어 저장 * 메모리에 값을 저장하는 두 가지 경우 1) Big endian 방식 2) Little endian 방식(intel x86계열 CPU 사용 방식) ** 특정 영역의 메모리는 운영체제가 사용하고 있다. - 0 번지를 시작으로 64KB만큼의 메모리는 운영체제가 사용. - 이 주소의 메모리를 읽거나 쓰려는 접근이 있을 경우, 프로그램 비정상적 종료 ** 스택이든, 힙이든, 실행 코드.. [C언어] 상수의 종류 * 문자 상수 - C언어로 프로그램을 만들 때 볼 모든 문자의 실체는 아스키 코드에 대응하는 어떤 숫자라고 인지할 것!! #include void main() { char ch = 'A'; } - [ char ch = 'A'; ] 라는 코드는 자료형이 char형인 변수를 선언, 영문자 A로 초기화하라는 의미 - 그냥 A라고 작성하면 의도하지 않은 연산 이루어질 수 있으니 주의! - 'A' 대신 "A" 라고 작성하면 문자 상수가 아니라 문자열 상수 A가 되므로 주의! - C언어에서 영문 한 글자를 저장하기 위한 8비트 자료형으로는 char와 unsigned char가 있다. char 는 주로 영문자 한 글자를 저장하는 데 사용 unsigned char형은 문자 저장보다는 1바이트 크기의 메모리라는 의미로서.. 이전 1 2 다음