[CPP00] Exercise 00: Megaphone
c++의 표준 출력 스트림인 cout사용법 익히기
과제 내용
다음과 같이 작동하는 megaphone프로그램 구현.
$>./megaphone "shhhhh... I think the students are asleep..."
SHHHHH... I THINK THE STUDENTS ARE ASLEEP...
$>./megaphone Damnit " ! " "Sorry students, I thought this thing was off."
DAMNIT ! SORRY STUDENTS, I THOUGHT THIS THING WAS OFF.
$>./megaphone
* LOUD AND UNBEARABLE FEEDBACK NOISE *
$>
과제분석
- megaphone프로그램은 실행시에 argument를 받아서 대문자로 변환하여 출력을 한다.
- argument가 여러개일 경우 띄어쓰기없이 바로 이어서 출력을한다.
- argument가 0개일 경우 "* LOUD AND UNBEARABLE FEEDBACK NOISE *"를 출력한다.
megaphone.cpp
#include <iostream>
namespace my_func
{
char to_upper(const char c)
{
if (c >= 'a' && c <= 'z')
return (c - 32);
else
return (c);
}
}
int main(int argc, char **argv)
{
int i;
if (argc == 1)
{
std::cout << "* LOUD AND UNBEARABLE FEEDBACK NOISE *" << std::endl;
return (0);
}
argv++;
while (*argv)
{
i = 0;
while ((*argv)[i])
{
std::cout << my_func::to_upper((*argv)[i]);
i++;
}
argv++;
}
std::cout << std::endl;
}
namespace
하나의 프로그램을 만들다 보면 수많은 구조체, 함수, 객체들을 선언하게 되는데요.
그런데 여러명의 개발자가 붙어서 작업을 하다보면 이름이 중복해서 선언하게 되는 경우가
발생할 수 있는데 이럴 때 충돌이 발생하는 것을 방지하기 위해 만들어진 것이 namspace!!
namespace 선언
namespace my_namespace
{
함수, 클래스, 변수 등등
}
namespace 접근
1. my_namespace::요소이름 으로 선택적으로 명시하여 접근
2. using 키워드를 사용한 전역적인 접근
- 위처럼 namespace를 명명하고 내부에 함수, 클래스, 변수를 정의할 수 있다.
- 이렇게 namespace로 보호하면 같은 이름으로 외부에 선언되어있어도 충돌하지 않고 사용이 가능해진다.
- 사용은 my_namespace::요소이름 으로 접근하여 사용이 가능하다.
- using 키워드를 사용했을 때, 요소이름이 중복되는 경우에는 충돌이 날 수 있기 때문에 이번 과제에서도 지양하는 것 같다.
- 이번과제에 사용할 std::cout 또한 표준 라이브러리의 std라는 namespace에 선언된 cout객체에 접근해 사용하는 것이다.
표준 출력 스트림 cout
cout 사용
#include <iostream>
std::cout << 요소;
- c++구현체에서 표준출력 스트림을 사용하여 프로그램의 일반적인 출력 기능을 구현할 때 사용한다.
- c언어의 printf와 비슷하게 내부에서 버퍼를 사용한다.
- '<<'연산에 대해서 기본자료형들은 모두 오버로딩 되어 있기 때문에 printf와 다르게 서식지정자를 사용할 필요가 없이 출력이 이루어진다.
cout 버퍼를 비우는 경우
아래의 세 가지 경우에 대해서 cout은 화면에 버퍼에 저장한 내용을 출력하고 버퍼를 비운다.
- 버퍼가 가득 차 있을때
- 라이브러리가 표준 입력 스트림으로 입력 내용을 요청 받을 때 (ex std::cin >> input)
- 라이브러리에 명시된 코드를 입력받았을 때 (ex std::cout << std::endl;)