-
명품 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