수강한 개념
함수
- 가독성이 좋아짐
- 유지보수가 용이함
- 변수를 선언하듯 함수도 선언해야함
- 선언 > 정의 > 호출
- 헤더파일 -> 함수 선언부가 있음
- 함수선언은 헤더파일, 정의는 별도의 소스파일에, 메인은 메인대로 -> 습관들이기
재귀함수
- 잘못짜면 무한루프 엔딩
배열
- c에서는 배열의 크기가 정해져있어야한다
- 배열의 이름 = 배열의 시작주소 = 상수
- rank 알고리즘
문자배열
- scanf -> 공백문자를 구분자로 받음
- 표준입력 : gets( str ); puts( str ); -> 배열길이 넘어도 입력을 받음 (안전하지 않은 함수)
- 파일입력 : fgets( str, 80(크기지정), stdin(파일포인터) );
- strcpy (to(주소), from(주소)); 문자열 복사
- strcmp (배열1, 배열2) 문자열 내용 비교 : 리턴값 0 = 문자열 두개가 같다, -1 = 첫문자 값이 작다, 1= 첫문자 값이 크다
- strlen(배열1) 문자열의 길이 반환(널문자 카운트 x)
- strcat(배열1, 배열2) 문자열 합성
ㄴ 문자열들의 크기체크를 안하기때문에 개발자가 체크
포인터
- 포인터 앞 자료형 = 포인터가 가리키는 주소에 있는 값의 자료형
- 포인터는 8바이트 or 4바이트
char str[80];
char* pstr = str;
str++; <--- 안됨. str은 상수
- 포인터 변수는 반드시 초기화 필요
const 포인터
- const = 상수
- 주소변경은 가능, 내용을 직접 바꾸는 것은 불가능
- 함수 호출시 호출 되는 쪽에서 주소로 접근해서 내용물을 변경 할 수 있음
다차원 배열
- 연속적으로 메모리에 접근하도록 행단위로 먼저 접근하는 것이 일반적
- 1401 다시 해보기
포인터 배열
- 개념 확실히 하기
문제 구현 / 개선방안
1. 포인터 - 메뉴 구현 / 성적처리
- 함수를 호출할때 포인터가 어떻게 전달되고 처리되는지 더 공부할 필요가 있음
- 하지만 결정적으로 못 푼 원인은 count 가산을 안했다
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include "score.h"
int main() {
//do-while 입력/출력/검색 메뉴 프로그램
int menuNo;
int score[30];
int stCount = 0; //학생수
do {
printf("\n----메뉴----\n");
printf("1. 입력\n");
printf("2. 출력\n");
printf("3. 검색\n");
printf("9. 종료\n");
printf("선택 --->");
scanf("%d", &menuNo);
switch (menuNo) {
case 1:
printf("입력 선택하였습니다\n");
//배열은 배열이름으로, 변수는 &붙여서 주소값을 넘긴다.
//학생수를 변경해야 하기 때문에 포인터로 전달.
scoreEnter(score, &stCount); //성적 입력
break;
case 2:
printf("출력 선택하였습니다\n");
//학생수는 값만 전달하면 되기때문에 그냥 전달
scorePrint(score, stCount); //성적 출력
break;
case 3:
printf("검색 선택하였습니다\n");
scoreSearch(score, stCount); //성적 검색 : 번호 기준
break;
case 9:
break;
default:
printf("잘못 선택하였습니다\n");
break;
}
} while (menuNo != 9);
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void scoreEnter(int * score, int* stCount) //성적 입력
{
while (*stCount < 30)
{
printf("점수 입력 : ");
scanf("%d", &score[*stCount]);
if (score[*stCount] == -1) break;
(*stCount)++; //가산 연산을 하지 않아서 작동하지 않음. 아래도 마찬가지
}
}
void scorePrint(int* score, int stCount) //성적 출력
{
for (int i = 0; i < stCount; i++) printf("%d번 : %d점\n", i+1, score[i]);
}
void scoreSearch(int* score, int stCount) //성적 검색 : 번호 기준
{
int snum;
printf("번호 입력 : ");
scanf("%d", &snum);
printf("%d번 : %d점\n", snum, score[snum-1]);
}
#pragma once
void scoreEnter(int* score, int* stCount);
void scorePrint(int* score, int stCount);
void scoreSearch(int* score, int stCount);
2. 다차원 배열 - 문자열 비교
- 2차원 배열이라서 문자열 비교가 안되는건가 했는데 그냥 배열 타입을 char가 아닌 int로 했었다
- 하.......
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char names[30][10]; //배열 타입 잘 확인하기
for (int i = 0; i < 30; i++) //입력
{
fgets(names[i], 10, stdin);
names[i][strlen(names[i]) - 1] = '\0';
printf("%s", names[i]); //확인용
if (!strcmp(names[i], "end")) break;
//strncmp n개만큼 비교하기 ->이러면 앞에 end가 포함된 모든 단어가 해당됨
}
return 0;
}
기타 사항
- make, Cmake 알아보기
- 전역변수는 프로그램이 종료될때까지 메모리를 먹음 / 지역변수는 실행될때만 먹음
VEDA 바로가기 : www.vedacademy.co.kr
VEDA(한화비전 아카데미) 영상으로 확인하기 : https://url.kr/zy9afd
본 후기는 VEDA(한화비전 아카데미) 1기 학습 기록으로 작성되었습니다.
'교육관련 > 한화비전 VEDA 수강일지' 카테고리의 다른 글
[VEDA 1기 수강일지] 6일차 - C언어 (임베디드/리눅스) (1) (0) | 2024.07.22 |
---|---|
[VEDA 1기 수강일지] 5일차 - C언어 기초 (5) : 파일입출력, 전처리, 비트연산, volatile (0) | 2024.07.19 |
[VEDA 1기 수강일지] 4일차 - C언어 기초 (4) : 구조체 포인터, 연결 리스트 (0) | 2024.07.18 |
[VEDA 1기 수강일지] 3일차 - C언어 기초 (3) : 포인터 응용, 동적 할당, 구조체 (0) | 2024.07.17 |
[VEDA 1기 수강일지] 1일차 - C언어 기초 (1) : 변수, 입출력, 제어문 (0) | 2024.07.15 |
댓글