배움 저장소

[코테용C++ 핵심정리] 챕터3. 흐름제어 본문

Programming Language/C++

[코테용C++ 핵심정리] 챕터3. 흐름제어

시옷지읏 2023. 11. 17. 21:54

반복


참고 : Character 자료형의 크기는 1byte 이다.

따라서 문자열 크기를 sizeof로 계산할 때 문자 자료형의 크기로 나누어줄 필요가 없다.

char my_string[] = "Hello, World!"; // 배열 크기를 알아서 결정

cout << "size of character = " << sizeof(char) << endl;

for (int i = 0; i < sizeof(my_string); ++i)
{
    cout << my_string[i] << endl;
}

 

반복문으로 문자열을 출력할 때 자료형의 크기 대신 null character를 활용할 수 있다.

for (int i = 0; my_string[i] != '\0'; ++i)
{
    cout << my_string[i];
}

 

Segmentation fault

for(int i=0; my_string[i] != '\n'/*Error*/; ++i)

위와 같이 실수를 했을 때 컴파일 에러를 확인하고 어떤 코드에서 문제가 발생했는지를 찾아보는 과정을 거친다.

메모리 접근에 문제가 발생할 때 Segmentation fault가 발생한다.

 

해결방법 찾기

debugging

 

endl

1. 줄바꿈

2. 버퍼 내용을 모두 출력하라

endl이 없을 때 debugging 화면이 비어있을 경우가 있다. cout 출력이 버퍼에 들어간 뒤에 화면으로 옮겨지지 않았다.

줄바꿈 없이 버퍼 내용을 모두 출력시키기 위해서 std::flush를 사용할 수 있다.

cout << i << endl;
cout << i << flush; // 줄바꿈 없이 버퍼 내용을 출력

 

 

String vs Character Array

char CharArray[] = "Nice";
cout << sizeof(CharArray) << endl;        // 5

string StringStructure = "Nice";
cout << sizeof(StringStructure) << endl;  // 40 
cout << StringStructure.length() << endl; // 4

 

숫자 맞추기 게임


난수 생성

// https://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> distrib(1, 99); // [1, 99]

int number = distrib(gen);

 

숫자 찾기 

[1, 99]를 [1,49] [50,99]

[1,49]를 [1,24] [25,49]

위와 같이 효율적으로 탐색하자.

Comments