gse123   6년 전

atoi 함수로 문제를 푸는데 b 값이 자꾸 이상하게 나오네요.


두 번째 받는 값이 문제인거 같은데 왜 문제인지 잘 모르겠습니다.


배열을 다른걸로 선언해도 똑같네요..

djm03178   6년 전

atoi는 문자열을 정수로 바꾸어주는 역할을 합니다.

문자열은 시작점과 널 문자를 통해 길이가 정의됩니다.

하지만 %c는 문자열이 아닌 문자를 입력받는 서식이고, 문자는 그 문자만을 저장할 뿐 널 문자를 따로 저장해주지 않습니다.

끝을 나타내는 표식이 없으므로 atoi는 어디까지를 변환해야 하는지 알지 못합니다.

gse123   6년 전


궁금증이 풀렸네요. 항상 답변해주셔서 감사합니다!

knight7024   6년 전

char에서 int로 바꾸는 가장 쉬운 방법은 48을 빼면 됩니다!

djm03178   6년 전

그건 단일 문자를 수로 바꾸는 방법이고, 여러 자릿수를 한 번에 바꾸는 데에는 atoi가 좋습니다. 물론, atoi가 하는 일 자체가 한 문자씩 그렇게 변환하고 10을 곱하고 더하는 방식이죠.

그리고 48이라고 직접적인 값을 쓰는 것은 좋지 못한 습관입니다. 48은 아스키 코드에서만 동작하는 값인데 이는 C 표준에서 정해져 있는 것도 아닐 뿐더러 가독성도 해칩니다. '0' 이라고 쓰는 것이 좋습니다. 마찬가지로 A라는 문자는 65라고 쓰지 말고 'A'라고 쓰는 것이 좋습니다.

knight7024   6년 전

아하 %c만 보고 넘어갔더니 실수를 했네요.

그리고 atoi와 itoa는 표준 함수가 아니어서 작동하지 않는 것 아니었나요? 저는 sscanf를 사용합니다.

djm03178   6년 전

itoa는 표준이 아니지만, atoi는 표준이 맞습니다.

http://en.cppreference.com/w/c...

그리고 단순히 atoi로 할 수 있는 작업이라면, 성능 면에서 sscanf보다는 atoi가 훨씬 빠릅니다.

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