• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

!line_flag에 대한 질문 있습니다.

20.05.26 12:03 작성 조회수 157

1

기존에 문의 삭제하고 다시 올립니다.

bool line_flag = false;  처음에 이렇게 선언을 해주면  

if (!isspace(c) && !line_flag) 과정에서 "공백이 아니고 false가 아니라면" 으로 해석을 하고 있습니다.

그런데 강의에서 교수님에서는 true가 아니라면으로 말씀을 해주십니다. 

왜 그런지 이유를 알 수 있을까요? false로 선언을 해주었는데 "false가 아니라면"이 아니라 왜 "true가 아니라면"으로 말씀을 해주신건지 이해가가지 않습니다.

 line_flag를 false로 선언을해서 !false가 되어서 true가 되는 것 아닙니까? 그러면 "공백이 아니고 ture라면" 으로 해석해야 하는 것 아닌가요?

디버깅을 하였을때도 !line_flag가 true로 나올거라 생각을 했는데 false로 나와서 몇번이고 보았지만 이해가 되지 않습니다.

좋은답변 부탁드립니다.

답변 6

·

답변을 작성해보세요.

1

Hello Yeo님의 프로필

Hello Yeo

2020.05.26

if(!isspace(c) && !line_flag) 가 의미하는 바는...
'공백이 아니고 line_flag 가 false 라면' 혹은 '공백이 아니고 line_flag 가 true가 아니라면' 입니다.

line_flag를 false로 선언을해서 !false가 되어서 true가 되는 것 아닙니까? 그러면 "공백이 아니고 true라면" 으로 해석해야 하는 것 아닌가요?
=> and 의 일반적인 상황을 두고 이야기 하시는건지, line_flag가 어떤 값을 가지고 있느냐에 대한 것인지 구분이 필요해보이네요.
전자라면 맞는 말입니다. 후자라면 틀린말입니다.
 
디버깅에 관해서는
디버깅을 할때 !line_flag 에 대한 정보가 나올 것이라 착각을 하고 계신 것은 아닌지요???
첫번째 while 문 진입입니다.

두번째 while문 진입입니다.


이번엔 이해하셨길 바랍니다. printf로 출력되고 있는 정보는 line_flag의 값입니다.
0 이면 false,
0 이 아니면 true입니다.

어쩌면 !line_flag 만으로 line_flag에 바뀐 값이 들어가 있을 것이다.
라고 생각하시는 것일 수도 있겠네요.
값을 넣어주려면
line_flag = !line_flag 를 해줘야합니다.

0

상욱님의 프로필

상욱

2020.05.27

이래서 프로그래머들이 고통받나 봅니다. ^^

0

죄송합니다. 제가 이해를 잘 못해서 질문을 이상하게 했네요. 저는 if(true)를 성립하기 위해서는 !line_flag자리에 true가 들어와야 된다고 생각하고 한 질문이였는데 제가 아직 초보라 질문을 이상하게 했나보내요. 답변 감사드립니다.

0

상욱님의 프로필

상욱

2020.05.26

if(true)를 성립 하기 위해 이해하신건 맞지만

Hello Yeo님 답글처럼 if(!isspace(c) && true)와 if(!isspace(c) && !true)에서 true = !line_flag입니다.

"공백이 아니고 false라면" -> "공백이 아니고 !line_flag가 false라면" 으로 해석하셔야 합니다.

 "공백이 아니고 true가 아니라면" -> "공백이 아니고 !(!line_flag) 라면"

0

Hello Yeo님의 프로필

Hello Yeo

2020.05.26

7.1 강의와 7.7 강의를 다시 보시고 정리해보세요...
아직은 때가 아니신 것 같습니다.

0

답변 감사합니다. 완벽한 이해를 위해서 질문을 좀 드려도 될까요?

혹시 if(1) 을 가지고 if문을 이해를 해야 하는 것이 맞나요?  그래서 if(!isspace(c) && !line_flag)이 if(1)을 성립 되기 위해서는

if(!isspace(c) && true)라고 생각을 하는데 여기에서 if(!isspace(c) && !true)가 되니깐 해석이 "공백이 아니고 false라면" 혹은 "공백이 아니고 true가 아니라면" 으로 해석을 하면 되는 것인가요?