ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 명품 C++ 2장 8번
    C++ 2018. 10. 28. 01:50

    8. 한 라인에 ';'으로 5개의 이름을 구분하여 입력받아, 각 이름을 끊어내어 화면에 출력하고 가장 긴 이름을 판별하라.


    소스코드


    #include <iostream>
    #include <cstring>
    using namespace std;
    int main() {
        cout << "5 명의 이름을 ';'으로 구분하여 입력하세요" << endl<<">>";
        char name[100], bigName[100];
        int len = 0;
        for (int i = 0; i < 5; ++i) {
            cin.getline(name, 100, ';');
            cout << i + 1 << " : " << name << endl;
            if (strlen(name) > len) {
                len = strlen(name);
                strcpy(bigName, name);
            }
        }
        cout << "가장 긴 이름은 " << bigName << endl;
    }


    실행결과


    cin.getline 의 속성인 문자열 끝을 구분하는 기능으로 문자열 5개를 입력 받았습니다.

    입력받을 때 마다, 길이를 비교하여 가장 큰 문자열을 bigName 변수에 저장하였습니다.



    처음에는 len을 -999로 설정했었는데


    다음처럼 비교하는 코드에서 비교가 일어나 에러가 났습니다.


    왜 그런가 찾아봤더니


    strlen의 리턴값은 unsigned int 이라고 합니다.


    근데 int의 범위는 -2,147,483,648 ~ 2,147,438,647 이고

    unsigned int 의 범위는 0 ~ 4,274,967,295 입니다.


    그래서 비교 할때 int len 이 unsigned int 로 자동 형변환하여, 음수 -999는 범위에 들어가지 못 해 위의 결과처럼 나온다고 합니다.


    자료형 크기의 대한 내용의 출처 :  http://newmkka.tistory.com/69

    stlen 리턴값에 대한 출처 : https://m.blog.naver.com/PostView.nhn?blogId=tipsware&logNo=220982995703&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F


    형변환에 관한 출처 : http://playground10.tistory.com/5



    'C++' 카테고리의 다른 글

    명품 C++ 2장 10번  (0) 2018.10.28
    명품 C++ 2장 9번  (0) 2018.10.28
    명품 C++ 2장 7번  (0) 2018.10.28
    명품 C++ 2장 6번  (0) 2018.10.28
    명품 C++ 2장 5번  (0) 2018.10.28

    댓글

© 2018 TISTORY. All rights reserved.