• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

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

20.03.13 15:09 작성 조회수 161

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

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

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

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

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

islower(ch) == 2

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