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

Wonder님의 프로필 이미지
Wonder

작성한 질문수

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

7.8 단어 세기 예제

코드 질문입니다!

작성

·

160

0

안녕하세요! 강의를 듣고 구현하던 중 질문이 생겨 글 올렸습니다.

교수님께서 작성하신 코드와 일치한다고 생각하는데 결과값이 다르게 나와서 혼란을 겪고있습니다.

아래에 제가 작성한 코드를 첨부하였습니다.

#include <stdio.h>

#include <ctype.h>

#include <stdbool.h>

 

#define STOP '.'

 

int main()

{

char ch;

int ch_count = 0, word_count = 0, line_count = 0;

bool word_flag = false;

bool line_flag = false;

 

printf("Enter text: \n");

while ((ch = getchar()) != STOP)

{

if (isspace(ch)==false)

ch_count++;

if (isspace(ch) == false && line_flag == false)

{

line_count++;

line_flag = true;

}

if(isspace(ch)==false && word_flag == false)

word_count++;

word_flag = true;

if (ch == '\n')

line_flag = false;

if (ch == ' ')

word_flag = false;

}

printf("ch_count = %d, word_count = %d, line_count = %d", ch_count,word_count, line_count);

return 0;

}

----------------------

테스트 케이스는 아래와 같습니다.

hello world

abcde .

-------------- (abcde 와 마침표 사이에 빈칸 有)

이에 저는 아래와 같은 출력을 얻었습니다.

ch_count = 15, word_count = 2, line_count = 2

---------------------

하지만 word_count는 3이 되어야 합니다 ..ㅠ_ㅠ 어디서 틀린걸까요??

 

+ 디버깅을 하면서 알아내려하는데, 디버깅을 진행할 때  while ((ch = getchar()) != STOP) 에서 

엔터를 치면 바로 while 문 안으로 들어가버립니다.

hello world

abcde .

을 입력해야 하는데, world 를 치고 엔터를 누르면 바로 if문으로 넘어갑니다.(디버깅할 때)

디버깅하지 않고 실행을 시키는 경우에는 해당 문제가 발생하지 않습니다...

혹시 왜 이렇게 되는걸까요..??

 

항상 좋은 강의에 감사드리며, 건강하시길 바랍니다.

질문 조교님들도 학업과 병행하는 바쁜 일정 중에서 답변 다느라 너무 고생많으시고 감사드립니다. 감기 조심하시기 바랍니다 : )

답변 2

1

안녕하세요!

같은 강의에 있는 질문인데 https://www.inflearn.com/questions/104756 이 답변을 한번 참고해주셨으면 좋겠습니다!

강의처럼 !isspace(c) 가 아닌 isspace(c) == false 이런식으로 쓰셨는데 이게 잘못된 결과를 낳을 수 있어요!

추가로 말씀해주신 부분은.. 원래 디버깅대로 동작하는건데 실행시에는 그렇게 안보이는 것 뿐이에요!

hello world 하고 엔터치면 여기까지만 입력된 부분에 대해서 while ((c = getchar()... 반복이 진행되는거구요 getchar() 로 더 이상 입력 진행할게 없으면 깜빡깜빡 하면서 다시 다음줄에서 입력 받는겁니다.

hello world 까지 입력하시고 엔터치셨을 때 사실 저렇게 while 문이 몇번 돌았던거에요. 디버깅대로요. 너무 순식간이다보니 와닿지 않으셨던 것 같습니다. 

Wonder님의 프로필 이미지
Wonder
질문자

와 바로 이해됐어요... 짱..!

1

Wonder님의 프로필 이미지
Wonder
질문자

+ 7.8 단어 세기 예제 강의의 9분대입니다!

Wonder님의 프로필 이미지
Wonder

작성한 질문수

질문하기