초보자를 위한 C++ 200제 독자를 위한 Q&A 공간입니다.

초보자를 위한 C++ 200제 독자를 위한 Q&A 공간입니다.


초보자를 위한 C++ 200제 독자를 위한 Q&A 공간


이곳이 저와 여러분들이 소통하는 자리가 되었으면 좋겠습니다.


책의 내용과 관련하여 궁금한 점이나 묻고 싶은 내용은 아래 댓글로 질문해주세요.

질문은 공개 댓글로 해주셔야 많은 분들에게 공유할 수 있다는 것도 참고해주세요.


※ 로그인하지 않고 비밀 댓글을 다시면 본인도 댓글을 확인할 수 없습니다.


질문에 대한 답변은 저 뿐만 아니라 저보다 지식이 많은 분들께서 해주셔도 됩니다.

제가 잘못알고 있거나 모르는 부분도 있으니깐요.


첨부 파일은 초보자를 위한 C++ 200제 책에 수록된 모든 소스코드입니다.


본문 소스 코드 30MB - 다운로드 [링크]


C++의 대가가 되는 그날까지 파이팅입니다~!


c++ 공부 책 200제 박준태


일부 예제 압축 파일

exam97.zip



초보자를 위한 C++ 200제 독자를 위한 Q&A 공간입니다.



댓글(63)

  • 이전 댓글 더보기
  • 알밧트
    2018.12.22 17:15

    85 - 2차원 배열 다루는 방법 예제가 잘못된거 같네요.
    해당 예제의 Fucn3은 초보 개발자에게 잘못된 예제를 제공해주신 것으로 보이네요.
    큰 오해를 불러 일으킬 수 있다고 생각합니다.
    저런 식으로 2차원 배열을 포인터로 받아서 처리할 수 있다고 배우게 되면 안됩니다. 저런식으로 이해하고 가느니 차라리 안쓰는게 낫습니다.
    해당 내용이 삭제가 되던, 아니면 별도 예제를 추가해주셔야 된다고 생각합니다.

  • 예제 초급53
    2019.03.09 12:02

    string seven_war = "임진왜란";
    string korea_war = "한국전쟁";

    if (seven_war.compare(korea_war) == 0)
    cout << "같은 문자열\n";
    else
    cout << "다른 문자열\n";

    예제처럼 쓰고 실했더니, 결과가 다르게 나오더라구요.
    위 예제는 수정한 부분입니다.
    같은문자열, 다른문자열이 책에는 반대로 쓰여있네요..

  • 예제 초급61
    2019.03.09 13:51

    include 한부분에서 algorithm이 빠졌네요.

  • 예제 초급65
    2019.03.13 13:50

    sort 함수를 사용하기위해서
    <algorithm>을 include 해야하는데 빠져있습니다.

  • 예제 중급 93
    2019.03.21 14:50

    txt 파일을 읽어오는 부분인데요, 한글이 물음표로 나옵니다.
    어떻게 해결해야하나요??

    • 2019.03.21 16:10 신고

      txt 파일을 ansi로 바꿔주세요.

      메모장 - 다른이름으로저장 - ansi 선택하면 됩니다.

      왜 그런진 http://riniblog.egloos.com/995731 이 포스트 읽어주세요.

      핵심만 발췌하면,

      1. 한글 윈도우에서 사용하는 코드 페이지는 CP949이며 EUC-KR 인코딩을 확장한 형태
      2. 한글 윈도우에서는 CP949로 인코딩
      3. 두 인코딩은 서로 호환이 되지 않기 때문에 단순히 값을 복사하면 다 깨진다.
      그래서 MultiByteToWideChar과 WideCharToMultiByte라는 함수를 지원한다.

  • 예제 중급 93
    2019.03.21 18:52

    txt 파일을 ansi로 바꿔서 저장했습니다만.. 그래도 물음표로 나와버리네요..
    뭐가 문제인걸까요..

  • 예제 중급 93
    2019.03.22 14:01


    #include <locale>

    setlocale(LC_ALL, "Korean");

    이렇게 두줄을 추가하니까 한글이 나오기는 나오네요..

    • 2019.03.22 15:24 신고

      그렇게 사용하면 전체 언어 설정이 바껴서 다른 언어로 읽을 땐, 그때마다 로케일을 또 바꿔야 합니다. 별로 추천하는 방법은 아닌데 .....

    • 예제 중급 93
      2019.03.22 15:37

      txt 파일도 ansi인거 확인했었고.. utf-8도 해보고.. 있는걸 다 해봤는데도 한글만 물음표로 나오더라구요.

      이런경우에는 프로젝트 설정 문제일까요?

    • 2019.03.22 15:41 신고

      텍스트 파일을 제 이메일로 보내주세요. 저도 파일을 봐야 압니다.

      민감한 내용이 들어있다면 파일 복사하여 일부 내용만 담아서 보내주세요.

    • 예제 중급 93
      2019.03.22 15:51

      민감한 내용이라고 하기보다는..
      올려주신 예제 압축폴더에 들어있던
      txt 파일이라서요.. 똑같은 파일입니다..

      ==================
      참 이상한게 95번 예제 할때는 또 한글이 잘나오네요..( 95번 예제 txt 파일도 압출폴더에 있던 파일입니다. )
      이유가 뭘까요..?

    • 2019.03.22 16:43 신고

      프로젝트랑, txt 파일 보내주세요. 말씀만 듣고는 모릅니다.

    • 예제 중급 93
      2019.03.22 17:04

      프로젝트가 있는 폴더를 압축해서 보냈습니다.
      이렇게 보내는게 맞는건지 싶지만요..

      물음표로 나오는것도 캡쳐해서 사진첨부했습니다.

    • 2019.03.22 17:46 신고

      살다보면, 내 자리에선 되는데 왜 남의 자리에선 안 될까 싶어, 고민하는 일들이 생깁니다.

      집, 회사에서 님이 보내주신 소스는 잘 돌아갑니다. 텍스트 파일에도 이상은 없고요. 그럼에도 전 되는데 왜 님은 안될까요.

      제가 님 PC 앞에 앉아 설정들을 비교하며 꼼꼼하게 살펴보지 않는 이상 이런 에러는 원인을 찾기 너무 힘듭니다.

      소스 코드 문제라면 제가 바로 답해드릴 수 있으나, 설정 문제로 발생하는 문제는 답변드리기 정말 곤란하네요.

      죄송합니다. 이 부분에 대해선 저도 명쾌하게 드릴 말씀이 없네요.

    • 예제 중급 93
      2019.03.22 17:54

      답변 감사합니다.

  • 예제 51번
    2019.07.02 18:31

    예제 51번 코드를 따라했는데요. localtime이 unsafe하다고 localtime_s로 하라고 하네요. 그런데 그렇게 하니까 localtime_s의 매개변수는 1개만 쓰는게 아니라고 하면서 실행이 안됩니다. 어떻게 해야하나요?

    • 2019.07.04 11:13 신고

      #pragma warning(disable : 4996)

      우선 using namespace std 아래에 위 코드를 넣어주세요.

      비주얼스튜디오 최신 버전에선 오류네요... 자세한 건 나중에 따로 포스팅하겠습니다.

      요즘 ... 참 힘드네요 ... ㅠ 조금만 기다려주세요.

    • 예제51번
      2019.07.04 17:32

      답변 주셔서 감사합니다. 천천히 포스팅 해주셔도 됩니다.ㅋㅋㅋ힘내세요~!

    • 2020.08.11 16:31 신고

      저도 이 오류가 나왔는데, pragma 넣으니 잘 되네요.

  • 중급 74번
    2019.08.29 14:18

    call by value는 인자로 넘어온 값을 내부적으로 복사해 사용한다고 되어있습니다. 이게 무슨 원리인지 이해가 안됩니다. 왜냐하면 그 뒤에 'year변수에 직접 10을 더한 것이 아니라 내부적으로 복사한 값에 10을 더한 셈입니다.' 라는 말이 있습니다. 그러면 year변수가 인자로 넘어간 이유는 그저 Func함수를 활성화시키기 위함인건가요? 함수의 작동순서도 이해가 안되네요;;

    • 2019.08.31 16:08 신고

      void Func(int arg)

      이 함수는 16번 라인을 통해 main() 함수의 year 10값을 전달 받습니다.

      "내부적으로 복사"한다는 뜻은 int arg에 10이란 값이 할당된다는 겁니다.

      그래서 변경 전 arg는 10이었지만, 8번 라인을 통해 20이 되었고 9번 라인을 통해 20이 출력됨을 확인할 수 있습니다.

      하지만 14번 라인에 선언된 year 값은 16번 라인 Func 함수 호출 이후에도 10이란 값이 유지됩니다.

      이는, 뒤에 나오는 call by reference와 차이점을 보이기 위한 예제입니다.

  • 입문1, 입문10
    2019.10.17 14:04

    안녕하세요.
    c++ 입문서로 구입해서 잘 보고 있어요.

    23p, std:: cout << " ~ " << endl;
    : endl; => std:: endl;

    40p, 9 각 괄호 안에는 변수를 이용해 크기를 지정할 수 있고, [3] 처럼 직접 정수를 삽입할 수도 있습니다.
    : 변수 -> 상수

    오타 혹은 틀린 내용이 있는것 같아서요.
    제가 고친게 맞을까요?

    감사합니다.

    • 2019.10.20 14:58 신고

      네 맞습니다. 지적해 주셔서 감사합니다!!!

      https://codingcoding.tistory.com/850

      책 정오표에 반영했습니다.

      다시 한 번 감사하다는 말씀 드립니다.

  • 023, 025
    2019.10.21 17:57

    안녕하세요.

    65p, 10번 라인 설명
    2가 출력 됩니다. 12라인과 마찬가지로 먼저 사용한 뒤 증가합니다.
    12라인 -> 9라인
    12라인은 더 뒤에 라인이기도 하고 감소하는 것 같습니다.

    68p, 13라인
    if(is_x = ture && is_y = true)
    -> if(is_x == ture && is_y == true)

    이렇게 고치면 될까요?
    감사합니다.

    • 2019.10.22 23:42 신고

      네 모두 오타입니다. ㅠㅠ

      https://codingcoding.tistory.com/850

      정오표에 반영했습니다. 지적해 주셔서 감사합니다.

  • 26 삼항연산자
    2019.10.21 18:12

    안녕하세요.

    71p, 삼항연산자 질문 드립니다.

    z = x > y ? x : y ;

    에서 z는 1항, x>y는 2항, x:y을 3항이라고 설명해주셨습니다.

    저는 x > y 가 1항, (?), x 가 2항, (:), y가 3항 인 것으로 알고있습니다.

    z = k, (k : 삼항연산의 결과) 로 보면

    z 와 삼항 연사자 의 결과 사이의 이항연산자 =가 사용된 것으로 생각했습니다.


    z를 1항으로 보는게 맞는 것 인가요?


    감사합니다.

    • 2019.10.22 23:43 신고

      이 부분은 제가 잘못 이해하고 있었네요. 님 말씀이 맞습니다.

      https://codingcoding.tistory.com/850

      나중에 님이 좋아하는 거 배부르게 사드릴게요. 감사합니다.

  • 035, 039
    2019.10.31 23:15

    안녕하세요.

    88p, 라인번호와 설명이 맞지 않습니다.
    87p, 8번 라인이 9번까지 넘어가면서 발생한 문제 같습니다.

    95p, 2번째 줄 while이 whie로 적혀있습니다.


    그런데 정말 맛잇는거 사주시나요?


    감사합니다.

    • 2019.11.02 20:00 신고

      감사합니다 "035,039님"~!!!!!

      "26삼항연산자님"처럼 꼼꼼하게 오타 지적해주셔서 감사합니다. 제가 너무 감사하여 두분에게 맛난거 사드리고 싶네요. ㅎㅎ

      감사합니다!!!!! 날짜 잡으세요!! 근데 두분 .... 먼저 연락해서 날짜 조율 해보세요.

  • p254 type_trais 사용하기3(conditional)
    2019.11.20 17:26

    기존의 코드가
    template <typename T1, typename T2>
    string TmpFunc(T1 x, T2 y)
    {
    conditional<is_same< T1, T2>::value, int, double >::type type1;

    return typeid(type1).name();
    }

    이렇게 되있었으나 이를 빌드하면 에러가 뜨고

    template <typename T1, typename T2>
    string TmpFunc(T1 x, T2 y)
    {
    typename conditional<is_same< T1, T2>::value, int, double >::type type1;

    return typeid(type1).name();
    }
    이렇게 하면 에러가 사라집니다.

    어떤 이유인지 궁금합니다.

  • 김민
    2020.01.17 00:48

    71쪽에 x값을 z에 할당한다고 하는데 y값을 할당하는 것 아닌가요?

  • Na
    2020.04.02 11:53

    120 함수 오버로딩 관련해서 p245을 보면 인자나 리턴값이 다르다면, 같은 이름의 함수를 선언하여 사용할 수 있다고 적혀 있는데 함수 오버로딩은 인자의 차이에 의해서만 가능한거 아닌가요? 리턴값 즉 반환형차이만으로는 오버로딩 못하는걸로 알고 있는데 제가 잘못 알고 있는건가요?? 궁금합니다

    그리고 예제 115~117 관련해서 일단 첫번째로 Not-A라는 말이 있나요?? 처음들어보기도 하고 구글링해도 명확히 나오는게 없어서ㅠ궁금합니다 또한 Has-A관련해서는 수정된 내용을 봐도 상속관계로만 표현이 돼 있는거 같은데 주로 포함관계로 많이 표현하지 않나요? 포함관계로 구현된 코드가 없고 상속관계로만 있길래 여쭤봅니다

    예제 123에서부터는 flag가 사용되던데 설명이 너무 부실해요ㅠㅠㅠ초보자 입장에서 책 뒷부분으로 갈수록 책보다 구글링이 훨씬 많은거 같아요 점점 앞에 내용이 나오지 않았던 부분들에 대해서도 그렇고 해당 예제의 내용부분에서도 그렇고 설명이 너무 없네요 기본적인 설명조차 없는 부분도 있길래 글 남겨요 class상속 관련해서도 그렇고 뒤로 갈수록 단순예제만 있는 느낌이 강해지는거 같아 아쉽네요 오타도 점점 많아지더라구요ㅠ

    • 2020.04.09 22:35 신고

      1. 함수 오버로딩 리턴값 부분은 지적 사항이 맞습니다. 정오표에 반영했습니다.

      https://codingcoding.tistory.com/850

      2. Not-A 관계가 아예 없는 건 아닙니다만, 일부에서 종종 사용하는데 제가 너무 보편적이라 소개한 면이 있네요. 클래그 상속 부붙은 상속으로만 구현해서 Has-A 역시 상속으로 설명했습니다. 제 의도가 명확하지 않았다면 그 부분에 대해선 죄송하다는 말 뿐이 할 말이 없네요.

      3. 예제 123부터 ... 설명이 너무 부족하다는 부분에 대해선 정말 죄송합니다. 책의 질에 대해서 질타하신다면 저는 정말 죄송하다는 말씀 밖에 드릴 수가 없네요.

      친구, 후배들과 만나 책 이야기를 하면 나오는 이야기 중 하나이기도 합니다.

      그래서 제가 최대한 블로그를 통해서 그 불만을 줄이고 싶습니다.

      책의 질이 불만이라면 저는 정말 죄송할 뿐입니다. 죄송합니다.

  • HCH
    2020.04.06 22:53

    완전 초보입니다.
    예제소스를 직접 작성해서 연구할 시간적 여유가 없어서
    부득이하게 소스를 다운받아서 보게 되었습니다. 궁금한 점이 있어서 질문올립니다.
    1. 195 폴더는 무엇인가요?
    2. json_exam1.json파일은 무엇인가요?
    3. 소스파일을 어떻게 해서 사용해하는지요?
    - 한 프로젝트에 2개 이상 소스파일을 넣으면 main이 2개 이상이라서 사용할 수 없지 않나요?

    너무 기초적인 질문이라도 너그럽게 답변 부탁드립니다.

    • 2020.04.09 22:36 신고

      1. json 예제에 필요한 폴더입니다.
      2. json 예제에 필요한 파일들입니다.
      3. 예제 파일에 main이 2개라면 2개인 이유가 있을 겁니다.

  • 2020.04.14 16:32 신고

    097번 질문 드립니다

    namespace fs = experimental::filesystem;
    에서 오류가 납니다. experimental이 클래스 혹은 네임스페이스가 아니라고 하네요...

    제가 시도해본 것들
    1. #include <experimental/filesystem> --> 실패. deprecated 되었다고 함.
    2. 프로젝트 속성에서 c++ 언어 버전을 최신으로 설정 --> 실패
    3. namespace fs = filesystem; --> 실패. std에 filesystem이 없다고 함.

    어떻게 해야할까요? ㅠㅠ

    • 2020.04.14 21:42 신고

      저는 비주얼스튜디오 2017에서 동작하는 것 확인했습니다.

      1. 비주얼스튜디오 버전?
      2. #include "stdafx.h" 1번 라인에 추가

      시도해 보시고 다시 알려주세요.

    • 2020.04.15 15:23 신고

      1. 비쥬얼스튜디오 2019입니다

      2. 실패했습니다 ㅜㅜ
      fatal error C1083: 포함 파일을 열 수 없습니다. 'stdafx.h': No such file or directory

      비쥬얼 스튜디오 버전이 문제일까요?

    • 2020.04.15 16:03 신고

      1. 일단 스택오버플로우에 나온 해결책 먼저 살펴보시고요.
      https://stackoverflow.com/questions/59564671/c-an-vs-error-experimental-filesystem-header-providing-stdexperimentalf

      2.
      https://en.cppreference.com/w/cpp/filesystem/current_path

      문서에 나온 예제 참조해 주시고요.

      3. 프로젝트 생성 때문에 생기는 문제일수도 있어요.

      https://docs.microsoft.com/ko-kr/cpp/build/vscpp-step-1-create?view=vs-2019

      이런 공식 문서 참조해서 프로젝트 다시 생성해 보시겠어요?

    • 2020.04.17 01:51 신고

      답변 감사합니다. 그런데 알려주신 문서들 모두 보고 해봤는데도 안되네요..

      제가 다시 시도해본 것들
      1. visual studio 모든 업데이트 --> 영향X
      2. C에 프로젝트 생성 / D에 프로젝트 생성 --> 영향X
      3. 각종 프로젝트 생성. 콘솔 앱, 미리 컴파일된 헤더 포함 등.. --> 실패


      특히 2번 cpp 레퍼런스의 예제를 따라하면
      "std 에 filesystem 멤버가 없다"고 뜬답니다. 언어를 C++17로 설정했는데도요!

      그래서 같은 프로젝트에 이번엔 다시 <experimental/filesystem>을 include하면 "c++17에서는 deprecated 되었다"고 뜨지요.. 언어설정이 안먹나 싶습니다.


      다른분들은 문제가 없는 것 같은데 저만 그런걸로 봐서 제 환경 쪽에 문제가 있는가 싶습니다ㅜ 감사합니다.

    • 2020.04.17 09:22 신고

      제가 지금 회사라 안 되지만 이따가 집에서 프로젝트 폴더 압축해서 업로드할께요.

      분명 환경설정 문제 같은데 97번은 건너뛰고 다른 예제부터 확인해주세요.

  • Na
    2020.04.20 14:38

    안녕하세요~
    53 문자열 비교하기 부분에서
    책에 보면 값이 서로 같다면 0이 리턴되고 다르면 -1이 리턴된다고 설명돼있는데
    제가 알기론 c언어의 strcmp처럼 서로 문자열이 같다면 0이고 비교대상의 아스키코드값이 더 작으면 -1 더 크면 1로 리턴하는 걸로 알고 있는데 확인 부탁드립니당!

    • 2020.04.26 14:21 신고

      네 맞습니다. 문자 하나를 비교할 땐 1 또는 -1입니다.

      string tmp1 = "B";
      string tmp2 = "C";

      cout << tmp1.compare(tmp2) << endl;

      이 경우 -1이 리턴되고,

      cout << tmp2.compare(tmp1) << endl;

      이 경우 1이 리턴됩니다.

  • 인생
    2020.04.27 22:02

    안녕하세요 저는 이 책으로 공부를 하는 학생입니다.
    다름이 아니라 공부 목적으로 이 책을 사용하는데.
    따로 기록할 부분이 필요하여 네이버 블로그에 기록을 남기게 되었습니다.
    하지만 어느정도 까지 책에 있는 내용을 기제 가능한지 몰라 링크와 덧글 남깁니다.
    오늘로 4일째에요
    https://blog.naver.com/wish0206

Designed by JB FACTORY