c++ - Module 00

mijeong·2021년 4월 14일
0

42_seoul

목록 보기
2/3

Exercise 00 : Megaphone

turn-in directory : ex00/
files to turn in : Makefile, megaphone.cpp
forbidden functions : none

모두가 깨어있는지 확인하기 위해서 다음과 같은 행동을 하는 프로그램을 만들어라.

$>./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 *
$>

접근

이 과제가 원하는 요구사항은 결국 인자로 주어진 문자를 모두 대문자로 바꿔서 출력해라는 말이다.

  • 어떤 헤더를 사용해야하며 어떤 함수가 있는지 공부를 하자.

공부

iostream

c++에 있는 입출력을 위한 헤더 파일.
cin, cout을 사용하기 위해 필요하다.

int		main()
{
	char	*name = "mijeong";
	std::cout << "hello" << name << "\n"; // \n는 버퍼를 비우지 않는다.
	std::cout << std::endl; // std::endl;은 버퍼를 비운다. 하지만 속도가 \n에 비해 느리다.
	return (0);
}

Exercise 01 : My Awesome PhoneBook

turn-in directory : ex01/
files to turn in : Makefile, .cpp, .{h, hpp}
forbidden functions : none

80년대, 그리고 그 때의 엄청난 기술에 온걸 환영한다. 형편없는 것 같이 동작하는 멋진 전화번호부 소프트웨어를 만들어라. 시간을 들여서 실행가능한 연관된 이름을 지어라. 프로그램이 시작했을 때 사용자는 prompted에서 인풋값을 넣는다. 당신은 ADD, SEARCH, EXIT 명령을 수용하고 나머지 인풋은 거절한다.

프로그램은 시작할 때에 비어 있지만 동적할당을 사용하지 않는다. 그리고 저장 contacts의 수가 8개를 초과하지 않는다. 만약 9번째 contact가 추가되었을 때는 적절한 행동을 정의해라.

  • EXIT명령이 들어왔을 때
    • 프로그램은 꺼져야하고 contacts는 없어져야한다.
  • ADD명령이 들어왔을 때
    • 프로그램은 유저에게 새 contact의 정보를 입력하는 창을 보여야한다. 모든 정보가 저장될 때까지 한번에 한 정보를 저장할 수 있게 해야한다.
    • contact는 first name, last name, nickname, login, postal address, email address, phone number, birthday date, favorite mewal, underwear color, darkest secret을 저장해야한다. (아니 전화번호부인데 왜 이딴걸 저장해야하는거지 ㅋㅋ 속옷색은 뭔데 ㅋㅋ)
    • contact는 반드시 너의 코드 안에서 클래스의 인스턴스 형태로 보여야한다. 클래스의 디자인은 너의 자유지만 동료평가는 네 선택의 일관성을 판단할거다. 내 말이 이해가지 않으면 오늘의 동영상을 보고와라.(and I don't mean "use everything" before you ask)
  • SEARCH명령이 들어왔을 때
    • 비어있지 않은 contacts를 리스트로 보여줘야한다. 4개의 컬럼: index, first name, last name, nickname을 보여줘야한다.
    • 각 컬럼은 10자이고 오른쪽 정렬이며 '|'로 나눠져야한다. 컬럼 길이보다 길면 자르고 표시 가능한 마지막 문자는 '.'으로 대체된다.
    • 그리고 프로그램은 원하는 연락처의 인덱스를 선택하라는 창을 띄웁니다. 그리고 그 정보를 한줄에 하나씩 출력합니다.(연락처를 선택하면 그 연락처의 정보를 한줄에 하나씩 쭉 출력하라는 뜻인거 같음.)말이 안되는 인풋이 들어왔을때의 행동을 적절히 정의해라.
  • 나머지 명령이 들어오면 그냥 버린다.

명령이 정상적으로 실행되면 프로그램은 또 다른 명령이 들어오기를 기다려야한다.

접근

클래스를 구현하고 클래스를 잘 다루는것을 목표로 하는 과제라고 생각한다.
크게 어려운 부분은 없다고 생각한다. stdcmp를 사용하는것을 고려했으나 std::string이라는 변수를 사용가능 하기 때문에 활용하기로 했다.

공부할 것

공부

std::cin

std::cin << number number가 int인데 문자를 입력하면 에러가 뜬다. 이를 해결하기 위해 아래와 같은 코드를 넣어줬다. 참고

if (std::cin.fail()) // 실패한 상황을 캐치하고
{
	std::cin.clear(); // 에러상태 취소
	std::cin.ignore(); // 입력버퍼에 남아있는 값들 지우기.
}

주의

  • 숫자,영어를 동시에 입력하면 둘다 동작한다.
  • stoi는 c11버전에 있기 때문에 이번 과제에서는 사용하면 안된다. 따라서 c의 함수라서 조금 찝찝하긴 하지만 atoi를 사용하기로 했다.
  • cin은 공백을 기준으로 입력을 받기 때문에 한줄에 여러 공백이 존재할 경우 여러 입력이 동시에 들어간다.
  • wset은 지정한 width보다 길 경우에 잘라주지 않기 때문에 substr을 이용하자.
profile
해위~!

0개의 댓글