완전초보 )C언어 bool 질문 드립니다

조회수 418회
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
#define STOP '.'

int main()
{
    char c;
    int n_chars = 0;        // number of non-space characters
    int n_lines = 0;
    int n_words = 0;
    bool word_flag = false;
    bool line_flag = false;

    printf("Enter text : \n");

    while ((c = getchar()) != STOP)
    { 
        if (!isspace(c))    // count non-space characters .. 입력받은 글자가 빈칸이 아니라면 
            n_chars++;      

        if (!isspace(c) && !line_flag)      // 빈칸이 아니고 line_flag 가 false 라면 
        {
            n_lines++;
            line_flag = true;
        }
        if (c == '\n')
            line_flag = false;

        if (!isspace(c) && !word_flag)
        {
            n_words++;
            word_flag = true;
        }
        if (isspace(c))
            word_flag = false;

    }
    printf("Characters = %d, Words = %d, Lines = %d\n", n_chars, n_words, n_lines);

    return 0;
}

제가 이 코드에서 if (!isspace(c) && !line_flag) 부터 이해가 안됩니다 디버깅을 해봐도 이해가 잘 안됩니다.

line_flagfalse 로 초기화를 했는데 if (!isspace(c) && !line_flag) 문에서 !line_flagfalse 인가요 true 인가요? 다른 예제로 변형해서 만드는건 성공했는데 이 예제 자체는 이해가 안됩니다. 도와주세요.

1 답변

  • line_flagfalse 로 초기화를 했는데 !line_flagfalse 인가요 true인가요?

    true입니다. 일반적으로 !FOOFOO의 불리언적 평가값의 반대 값으로 평가됩니다.

    헷갈리시면 플래그 변수명을 바꿔 보세요. 예컨대 line_flagshould_start_new_line 같은 걸로 대신한다면, !should_start_new_line이 뭘 의미하는지는 그걸 곰곰이 읽어보는 것만으로도 좀더 이해하기가 쉬울 수 있겠지요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)