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

김준한님의 프로필 이미지
김준한

작성한 질문수

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

7.8 단어 세기 예제

(!isspace(c) && !line_flag) 트루??

작성

·

266

0

if (!isspace(c) && !line_flag) {

n_lines++; 

line_flag = true; 

}라는 문법이

빈칸이아니면서 라인플레그가 트루일때 if문이 실행되는데요.

질문은 두가지 입니다.

1. 위에서 라인플래그를 false 로 초기화를 했는데 어떻게 (!isspace(c) && !line_flag)문이 실행이 되나요?

2. if문 조건에서  !line_flag가 트루인데 다시  line_flag = true; 트루로 바꿔야하는 이유가 뭘까용?

우문에 현답을 부탁드릴게요 ..ㅠ

답변 4

2

네 맞습니다. 답글 주신 것과 원래 질문 주신 것을 종합해보니 질문자님께서 !line_flag 로 인하여 line_flag 값이 true가 된다고 이해하고 계신 것 같다고 파악했는데 맞을까요? 

그냥 A + 3; 하면 A 변수에 들은 값은 변하지 않습니다. 그냥 A값을 빌려와 이에 3을 더하는 행위를 하는 것뿐이죠. 기존 A의 값엔 변동이 없습니다.

반면에 A=A+3 은 실제로 A값을 기존값에 3 더한 값으로 수정하는 식입니다.

마찬가지로 !line_flag 는 이 조건식 자체가 true가 되는거지 line_flag 값은 계속 그대로 false입니다. line_flag 값을 true로 바꿔준게 아닙니다. line_flag = !line_flag 이렇게 해야 line_flag가 true가 됩니다. 

1

안녕하세요.

라인 플래그가 true일때 실행되는 것이 아니라 false일 때 실행됩니다. line_flag 앞에 붙은 느낌표에 주목해주세요! if(!조건식) 라고 가정해보면 조건식 결과가 false면 if문이 실행되겠죠? 즉 !line_flag 조건식이 true 라는 것은 line_flag 가 false라는 것입니다. false 에 not (!)을 취하면 true가 되죠.

0

김준한님의 프로필 이미지
김준한
질문자

7.8 단어 세기 예제 강의를 보시면 

교수님께서 bool line_flag = false;로 초기화를 하시거든요.

초기화가 됐기때문에  if(!isspace(c) && !line_flag) if문 조건식에서 다시 부정을하면  !false라서 true가 아닌가요??ㅠ

김준한님의 프로필 이미지
김준한

작성한 질문수

질문하기