오늘은 4시간 동안 반복문 하나만 잡았다. 반복문이 날 안 놔준건지 내가 반복문을 안 놔준건지 모르겠다. 물론 틀린건 내 반복문 이론이 빈약해서 였다. 왜인지는 몰라도 반복문 안의 반복문의 변수 i, j , k 순으로 하나씩 해서 총 3개의 반복문을 썻다고 하면, 제일 바깥에 있는 반복문i가 반복될때 j, k의 값이 같이 증가한다고 생각하고 있었다. ㅎㅎ;
교정했으니까 4시간이 헛되진..
bool IsEqual(const char str1[], const char str2[]) {
for (int i = 0; i < 100; i++) {
if (str1[i] != str2[i]) return false;
if (str1[i] == '\0') break; // 일치하니까 루프 탈출
}
return true; // 여기서 한 번에 처리
}
A1. 함수 마지막에 return ture;로 if의 나머지 상황이(esle if) 해결이 돼서를 쓰지 않아도 됨. 이걸 Early Return 패턴이라고 부르며 깔끔한 코딩이라는데 잘 모르겠음.
그리고 return; 값을 받으면 함수를 종료한다고 함.
A2. ptr_a->first는 *(ptr_a).frist를 편하게 쓰기 위해 만든거라고 함. 너무 번거롭고 가독성이 떨어지기 때문에 "포인터라면 화살표(->)를 써서 한번에 해결하자고 약속했다고 함.
#include <iostream>
int main()
{
int sum = 0;
int num;
std::cout << "Please student number : ";
std::cin >> num;
int* arry = new int[num];
for (int i = 0; i < num; ++i)
{
std::cout << i + 1 << ". student score : ";
std::cin >> arry[i];
sum = sum + arry[i];
}
std::cout << "Total Score : " << sum << std::endl;
std::cout << "Average Score : " << (float)sum / num;
delete[] arry;
}
A3. 코드 순서상 std::cin >> num; 뒤에 int arry[num];을 쓴다고 해도 정적 배열(stack)은 프로그램이 실행되기도 전인 컴파일 단계에서 이미 설계가 돼 있어야한다. 크기를 정하지 않고 쓸거면 동적할당을 써야함.
컴파일러는 코드를 위에서 아래로 실행하는 존재가 아니라, 코드 전체를 보고 구조를 미리 확정 짓는 존재이기 때문이라고 함.
#include <iostream>
#include <cstring>
const int kMaxStr = 100;
struct MyStruct
{
int first;
int second;
};
int main()
{
// member(.) opereator
MyStruct a;
a.first = 123;
a.second = 456;
// a.first = 4byte , a.second = 4byte 두개 더하면 8
std::cout << sizeof(a) << std::endl;
}
Mystruct라는 구조체를 만들어 a라는 변수를 선언했는데 int first, second가 들어있는 sizeof(a)의 값은 얼마일까??
정답은 int자료형 두개 합쳐서 8byte.
그 이상 들어 있을때도 있다고함
#include <iostream>
int main()
{
int num, i, j, k;
std::cin >> num;
for (i = 0; i < 2 * num; ++i)
{
if (i >= num) // 뒤에
{
for (j = 0; j <= i - num; ++j)
{
std::cout << " ";
}
for (k = 0; k < 2*(2*num-2-i)+1; ++k)
{ // 5 3 1 1 2 3
std::cout << "*";
//0 1 2 3 4 5 6 7
}
std::cout << std::endl;
}
else
{
for (j = i; j < num - 1; ++j)
{
std::cout << " ";
}
for (k = 1; k <= 2 * i + 1; ++k)
{ // 1 3 5 7
std::cout << "*";
}
std::cout << std::endl;
}
}
}
/*
4 입력
*1 4
***3 3
*****5 2
*******7 1
2
3
4
*/
4시간 잡았다는 그 것 평소에 헷갈린다고 생각을 안 했는데 막상 풀려고 하니까 알고있었다고 착각한게 있었다. i라는 큰 반복문이 감싸고 j, k를 돌면 j, k 값은 변하지않음.. 당연한건데..