반응형
구조체
- 관련 있는 변수들을 모아 하나의 새로운 타입을 만들어주는 기능
형태
- struct 구조체명 {}; 의 형태로 구성
배열과 구조체의 공통점
- 데이터 집합이다.
- 연속된 메모리 블럭에 할당되며 구조체 맴버들은 연속된 메모리 블럭으로 잡히게 된다.
실습
#define NAME_SIZE 32
struct _tagStudent
{
char strName[NAME_SIZE];
int iNumber;
int iKor;
int iEng;
int iMath;
int iTotal;
float fAvg;
};
- 학생 정보 구조체 선언
//변수를 초기화 해주지 않으면 쓰레기 값이 들어감
_tagStudent tStudent_s;
_tagStudent tStudent = {};
_tagStudent tStudentArr[100] = {};
- 초기화 되지 않은 구조체, 초기화 된 구조체, 배열형의 구조체를 선안할 수 있음
// 구조체 맴버에 접근할때는 . 을 이용해 접근
tStudent.iKor = 100;
- "변수 이름.접근 하려는 변수" 로 접근이 가능
문자열 복사
//문자열을 배열에 넣을 떄는 단순 대입으로 불가능
//tStudent.strName = "내이름은 무엇일까"; X
// strcpy_s 라는 함수로 문자열을 복사해줘야하며 오른쪽에 있는 문자열을 왼쪽에 복사해준다.
strcpy_s(tStudent.strName, "내이름은 무엇일까");
cout << "이름 길이 : " << strlen(tStudent.strName) << endl;
- 문자열은 단순 복사 형태로 사용 못함
- strcpy_s를 사용하여 복사
cout << "ㅡㅡㅡㅡㅡㅡㅡㅡ 초기화 안함" << endl;
cout << "이름 : " << tStudent.strName << endl;
cout << "국어 : " << tStudent.iKor << endl;
cout << "영어 : " << tStudent.iEng << endl;
cout << "ㅡㅡㅡㅡㅡㅡㅡㅡ 초기화 함" << endl;
cout << "이름 : " << tStudent.strName << endl;
cout << "국어 : " << tStudent.iKor << endl;
cout << "영어 : " << tStudent.iEng<< endl;
- 결과 값
문자열 붙이기
//문자열 붙이는 함수
cout << "ㅡㅡㅡㅡㅡㅡㅡㅡ 문자열 붙이기" << endl;
strcat_s(tStudent.strName, "너는 아니?");
cout << "이름 : " << tStudent.strName << endl;
cout << "이름 길이 : " << strlen(tStudent.strName) << endl;
- strcat_s 를 이용해 문자열 붙이기 가능
문자열 비교
cout << "ㅡㅡㅡㅡㅡㅡㅡㅡ 문자열 비교" << endl;
cout << "학생 이름을 검색 해주세요 : ";
strcpy_s(tStudent.strName, "길동좌");
char strName[NAME_SIZE] = {};
cin >> strName;
//strcmp 문자열 비교 함수, 같을 경우 0을 반환
if (strcmp(tStudent.strName, strName) == 0)
{
cout << "학생 찾음" << endl;
}
else
{
cout << "학생 못찾음" << endl;
}
- 길동좌 라는 이름으로 복사 한 후 내가 적은 이름이 맞는지 체크하도록 함
결과
최종코드
#include <iostream>
using namespace std;
//구조체
//- 관련 있는 변수들을 모아 하나의 새로운 타입을 만들어주는 기능
//형태
//- struct 구조체명 {}; 의 형태로 구성
//배열과 구조체의 공통점 :
// - 데이터 집합이다.
// 연속된 메모리 블럭에 할당되며 구조체 맴버들은 연속된 메모리 블럭으로 잡히게 된다.
#define NAME_SIZE 32
struct _tagStudent
{
char strName[NAME_SIZE];
int iNumber;
int iKor;
int iEng;
int iMath;
int iTotal;
float fAvg;
};
int main()
{
//변수를 초기화 해주지 않으면 쓰레기 값이 들어감
_tagStudent tStudent_s;
_tagStudent tStudent = {};
_tagStudent tStudentArr[100] = {};
// 구조체 맴버에 접근할때는 . 을 이용해 접근
tStudent.iKor = 100;
//문자열을 배열에 넣을 떄는 단순 대입으로 불가능
//tStudent.strName = "내이름은 무엇일까"; X
// strcpy_s 라는 함수로 문자열을 복사해줘야하며 오른쪽에 있는 문자열을 왼쪽에 복사해준다.
strcpy_s(tStudent.strName, "내이름은 무엇일까");
cout << "이름 길이 : " << strlen(tStudent.strName) << endl;
cout << "ㅡㅡㅡㅡㅡㅡㅡㅡ 초기화 안함" << endl;
cout << "이름 : " << tStudent.strName << endl;
cout << "국어 : " << tStudent.iKor << endl;
cout << "영어 : " << tStudent.iEng << endl;
cout << "ㅡㅡㅡㅡㅡㅡㅡㅡ 초기화 함" << endl;
cout << "이름 : " << tStudent.strName << endl;
cout << "국어 : " << tStudent.iKor << endl;
cout << "영어 : " << tStudent.iEng<< endl;
//문자열 붙이는 함수
cout << "ㅡㅡㅡㅡㅡㅡㅡㅡ 문자열 붙이기" << endl;
strcat_s(tStudent.strName, "너는 아니?");
cout << "이름 : " << tStudent.strName << endl;
cout << "이름 길이 : " << strlen(tStudent.strName) << endl;
cout << "ㅡㅡㅡㅡㅡㅡㅡㅡ 문자열 비교" << endl;
cout << "학생 이름을 검색 해주세요 : ";
strcpy_s(tStudent.strName, "길동좌");
char strName[NAME_SIZE] = {};
cin >> strName;
//strcmp 문자열 비교 함수, 같을 경우 0을 반환
if (strcmp(tStudent.strName, strName) == 0)
{
cout << "학생 찾음" << endl;
}
else
{
cout << "학생 못찾음" << endl;
}
return 0;
}
반응형
'C++ > C++입문' 카테고리의 다른 글
[C++] 2. TextRPG 전투 (0) | 2025.03.30 |
---|---|
[C++] 1. TextRPG (0) | 2025.03.28 |
[C++] 빙고 게임 하드모드 (0) | 2025.03.27 |
[C++] 빙고 게임_3 (0) | 2025.03.26 |
[C++] 빙고 게임_2 (0) | 2025.03.26 |