작성
·
194
1
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<ctype.h>
#include<stdbool.h>
#include<iso646.h>
#define PERIOD '.'
int main()
{
char ch;
int count = 0;
while ((ch = getchar() != PERIOD))
{
if (ch == '\n')
count--;
else
count++;
}
printf("%d", count);
return 0;
}
선생님처럼 \n가 아닐때만 세라는 프로그램이아닌 \n이면 -1하고 아니면 +1하라라는 프로그램을 만들었는데 빌드값이 엔터를 포함해서 나오더라고요.. 어떤 부분에서 실수했는지 궁금합니다..
답변 2
1
안녕하세요.
우선 질문자님 코드로만 놓고 봤을 때 문제점은
while ((ch = getchar() != PERIOD)) 이 부분입니다.
ch = getchar() 가 먼저 실행되야 하는데, = 의 낮은 연산순위로 인하여 getchar() != PERIOD 가 먼저 실행됩니다. 따라서 이 조건식의 결과가 ch 에 들어가게 되므로 ch에는 1 아니면 0 만 들어가게 됩니다. 그래서 잘못된 결과가 나오셨을거에요.
ch = getchar() 부분을 소괄호로 묶어주어 먼저 실행되게 해야합니다.
while( (ch = getchar() ) != PERIOD)
-
우선 코드의 문제점을 답변 드려봤는데 빌드값이 엔터를 포함한다는게 어떤 말씀인지 조금 이해가 가지 않습니다. 위 답변으로 문제가 해결되지 않으셨다면 우선 디버깅으로 문제점을 찾아보시는게 좋을 것 같아요! 그래도 해결되지 않으신다면 입력을 어떤걸로 하셨을 때 어떤 결과를 기대하였는데 어떻게 나오셨다는 좀 더 구체적인 예시를 답댓으로 달아주시면 감사하겠습니다!
0
while ((ch = getchar()) != PERIOD) 이거랑
while (ch = getchar() != PERIOD) 이거랑
joy님이 말씀하신대로 .연산자 우선순위땜에 에러나네요..
continue로 했는데 왜 안되나보니깐.. 저거땜요...
감사합니다.. 한수배웁니다 ~