dragonmaster12   2일 전

처음에 이 문제를 atoi 함수를 이용해 풀려고 했습니다만,

반복문에 atoi를 집어넣자 컴파일이 아예 안 되길래 구글링을 동원했더니

atoi는 널 문자를 확인하고 변환하는 방식이라 안 된다고 하더군요.

그래서 단일 문자열은 - '0' 이라는 걸 해주면 정수형으로 변환된다길래  코드에 삽입했더니 되는 걸 확인했습니다.

-'0'을 넣었더니 왜 코드가 정상적으로 작동하는 지 알려주실 수 있을까요?

rnjstpgns91   2일 전

단일문자열에 -'0'을 넣었더니 왜 코드가 정상적으로 작동하는 지 알려주실 수 있을까요? 라고 이해하면 되나요?

'char' A라는 변수에 입력 값으로 0을 넣고, 10진수로 출력해보면 0이아닌 48이 나옵니다. A라는 변수 타입이 숫자를 말하는 int가 아닌 문자를 의미하는 char니까요.

문제에서는 문자의 의미인 0이 아니라 10진수의 의미 0을 원하는 것이니 그만큼 빼준거죠. 즉, -'0'  -48로 하셔도 같은 의미예요.

harinboy   2일 전

char형은 'A', 'B', '\0', '7' 등 문자를 담는 것으로 보이지만,

실제 컴퓨터 입장에서는 65, 66, 0, 55등의 수로 바꾸어서 사용합니다.

이를 아스키코드라고 합니다. 

이 때 문자 '0', '1', '2'...는 48, 49, 50...의 연속한 수로 바뀌기 때문에,

예를 들어 '7'-'0'을 하면 실제 계산은 55-48=7이라는 수로 바뀌어 나타나게 됩니다.

그래서 '0'~'9'의 char값에서 '0'을 빼는 것은 실제 정수 0~9로 바꾸는 것이 가능한 것입니다.
atoi는 문자열을 수로 바꾸기 때문에, 매개 변수로 문자 하나를 넣지 말고 '\0'으로 끝나는 문자열을 넣어주어야 합니다.

더 궁금하시다면 아스키코드에 대해서 찾아보시면 좋을 것 같습니다.

dragonmaster12   2일 전

다들 답변 감사합니다. 더 열심히 공부할게요!

댓글을 작성하려면 로그인해야 합니다.