강의

멘토링

커뮤니티

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

야링님의 프로필 이미지
야링

작성한 질문수

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

7.8 단어 세기 예제

!line_flag 질문드립니다.

작성

·

137

0

삭제된 글입니다

답변 6

0

야링님의 프로필 이미지
야링
질문자

아 ! 그러네요 8번째 줄의 line_flag도 값은 false네요.

그렇다면  8번째 줄의 if문에 충족을 못시키지 안나요?

 8 if (!isspace(ch) && !line_flag)의if 문은

 isspace(ch) 가 아니고   line_flag 거짓(현재 line_flage = 0 이니까))이 아닐때  line_flage가 1일때 true일때

8번째 if문으로 들어갈 수 있지 안나요? 그렇다면 아직 line_flag = false 인데 어떻게 들어갈수가 있나요?

위에 질문이랑 다 같은말인데 설명을 잘 못해서 계속 같은 질문해서 죄송합니다ㅠㅠ

0

음.. 비주얼 스튜디오로 디버깅 하시죠?? 느낌표에 마우스 커서를 대지 마시고 정확히 "line_flag" 에 마우스 커서를 올리시면 false 라고 뜰거에요.. 아마 ! 에 마우스 커서를 올리셔서 "! line_flag" 계산된 결과가 표시된 걸꺼에요. 

11 번째 줄을 지나면 line_flag 는 true 가 되는게 맞습니다.

0

야링님의 프로필 이미지
야링
질문자

아니요 ㅠㅠ 죄송해요 제가 글쓰는 재주가 없어서

그게 line_flag를 !line_flag 해도 line_flag 값이 변하지는 않겠죠.. 

제가 궁금한건 2번째줄에 line_flag = false로 정의하고

왜 8번째 if안에 있는 line_flag의 값은 true 되며 (그래야지 !line_flag 가 false가 되는거죠?)

디버깅을 돌렸을때 10번째 줄에 가도 왜 여전히 line_flag의 값은 false인지 

그러니까 왜 8번째 if문 안에있는 line_flag만 true값을 가지고 있는건지 그게 궁금한거에요

0

아 햇갈려 하시는 부분을 이해했습니다 ! 를 붙이면 line_flag 값이 바뀌어 저장되는 것이 아닙니다... line_flag 가 false 였다면 ! line_flag 를 해도 line_flag 는 여전히 false 입니다.

우리가 수학에서 A * 2  를 한다고 해서 A 값이 2배 증가하는건 아닌것 처럼요..

! 는 * 와 같은 연산을 하기 위한 기호일 뿐입니다.

0

야링님의 프로필 이미지
야링
질문자

네 그 개념은 이해 했습니다.

다만 2번째 줄에 line_flag = false로 정의해두고 8번째 줄 if문 안에 대입하여 비교할때의

!line_flag는 true가 되어야 하는것이 아닌가요?

line_flag는 false로 정의하였으니까요.

혹시나 싶어 while문에 line_flag가 다시 들어갈때

true로 다시 정의 되나 싶어서 디버깅을 해도 9번째 줄에 가도 line_flag는 false값으로 변함앖고

true로 다시 정의됐다고 하면 8번째 if문 안으로 못들어 가겠죠?

그래서 왜 8번째 안에 있는 line_flag만 true값을 가지고 있는지 궁금합니다

0

! 는 논리적 (logical) NOT 연산자입니다. (0 이면 1 로 1이면 0 으로 반대로 바꾸는 연산입니다)

( ! true ) == false 와 같습니다.

그래서 line_flag 가 false 일때는 반대로 true 가 되는 것이에요.

야링님의 프로필 이미지
야링

작성한 질문수

질문하기