네 그렇지요. int형 변수에 입력하는데 %hd 변환문자를 사용하면 4바이트 공간 중에서 절반인 2바이트에만 입력이 됩니다. 그리고 그 변수를 사용하면 4바이트 값이 모두 쓰이므로 나머지 2바이트의 쓰레기 값이 함께 사용되어 어떤값이 될지 알 수 없습니다. 결국 변수의 자료형에 맞는 정확한 변환문자를 사용해서 입력해야 정확한 결과를 얻을 수 있습니다.
정수와 실수는 데이터 형태가 달라 서식을 맞춰줘야 하고요. 정수는 char, short, int 모두 %d로 출력하면 됩니다. print함수가 인수를 받는 크기가 int형에 맞춰져 있으니 char, short등 크기가 int보다 작으면 크기를 늘려서 처리합니다. 따라서 모두 %d나 %u로 출력하면 되고요. long이나 long long의 경우는 크기가 클 수 있으니 꼭 %ld나 %lld로 출력해야 합니다.
scanf의 역할을 잘 이해했습니다 좋은영상 감사합니다! 그럼 만약에 변수의 메모리 할당이 4바이트고 scanf의 입력 할당이 2바이트면, 그때는 반대로 넉넉해서 문제가 없는걸까용?
네 그렇지요. int형 변수에 입력하는데 %hd 변환문자를 사용하면 4바이트 공간 중에서 절반인 2바이트에만 입력이 됩니다. 그리고 그 변수를 사용하면 4바이트 값이 모두 쓰이므로 나머지 2바이트의 쓰레기 값이 함께 사용되어 어떤값이 될지 알 수 없습니다. 결국 변수의 자료형에 맞는 정확한 변환문자를 사용해서 입력해야 정확한 결과를 얻을 수 있습니다.
혼공C ebook으로 잘 공부하고 있습니다!
책 내에 레벨업 스킬 파트가 어디있는지 몰라서 구글링하다가 유튜브에 이 강의를 찾았습니다
혹시 책에 어디쯤에 레벨업 스킬 파트가 있을까요? ㅠㅡㅠ
Printf 함수 %d로 더 작은 바이트 변수들 출력할 수 있지만 그래도 서식 맞춰주는 게 좋나요?
정수와 실수는 데이터 형태가 달라 서식을 맞춰줘야 하고요. 정수는 char, short, int 모두 %d로 출력하면 됩니다. print함수가 인수를 받는 크기가 int형에 맞춰져 있으니 char, short등 크기가 int보다 작으면 크기를 늘려서 처리합니다. 따라서 모두 %d나 %u로 출력하면 되고요. long이나 long long의 경우는 크기가 클 수 있으니 꼭 %ld나 %lld로 출력해야 합니다.
@@clecture 감사합니다.