인프런 커뮤니티 질문&답변

류리가가리이인님의 프로필 이미지

작성한 질문수

홍정모의 따라하며 배우는 C언어

7.3 ctype.h 문자 함수들

강의내용에 궁금한점이 생겨서 남겨봅니다.

작성

·

265

1

#include <stdio.h>
#include <ctype.h>

int main()
{
	char ch;

	while((ch = getchar()) != '\n')
	{
		if (islower(ch) == 1) {
			ch = toupper(ch);
		}
		else if (isupper(ch) == 1) {
			ch = tolower(ch);
		}

		putchar(ch);
	}

	putchar(ch);
	
	return 0;
}

이런식으로 하면 왜 소문자는 대문자로 안바꿔주는지 궁금하네요

답변 2

2

노력님의 프로필 이미지

2020. 03. 13. 20:46

https://www.tutorialspoint.com/c_standard_library/c_function_islower.htm

위 링크에서 return value를 참고하시면 islower(ch)의 return 값이 non-zero value(true)이고 이 말 대로라면 이는 1이 아닐 수 있습니다 

따라서 islower(ch) == 1 는 false(0) 를 return하게 되어 if 안으로 들어가지 못하는듯 합니다.

실제로  '== 1' 을 지우시면 정상 실행됩니다! 

저도 차근차근 강의듣고있는 학생이긴 한데 우연히 들어왔다가 저도 궁금해서 답글 달아봅니다....

0

조준수님의 프로필 이미지

2021. 06. 09. 16:59

islower() 함수의 리턴값이 true면 2가 반환되서 그렇네요.

isupper() 함수는 true일때 1이 반환되는데

왜 하필 2인지는 모르겠다만 코드를

islower(ch) == 2

이렇게 수정하시면 정상적으로 작동할거에요