작성
·
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 문이 몇번 돌았던거에요. 디버깅대로요. 너무 순식간이다보니 와닿지 않으셨던 것 같습니다.
1
와 바로 이해됐어요... 짱..!