글자 세기에서 엔터값 빼는 예제 질문있습니다.
231
작성한 질문수 11
#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로 했는데 왜 안되나보니깐.. 저거땜요...
감사합니다.. 한수배웁니다 ~
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
48
3
main 함수에서 왜 int만 선언이 되는걸까요
1
53
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
53
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
46
1
프로토타입과 함수간의 인자 불일치
1
72
2
12.12 헤더 관련 질문
1
59
2
Visual Studio Community 2026 사용 문의
1
135
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
59
2
getchar(), putchar()
1
92
3
강의자리ㅛ
1
78
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
112
2
소스파일안에 여러 파일
1
74
2
F5와 F7의 차이
1
75
2
c = TWO * (a+b); 에서 a와 b는?
1
58
2
; 세미콜론을 붙이는 기준에 문의
1
68
1
Step over 기능 문의
1
52
2
2.6 강의 따옴표 출력 규칙 문의
1
74
2
int main 함수 관련 오류 문의
1
67
2
13.4 words[0]
0
60
2
11.7 함수를 구현해 봤습니다.
1
62
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
64
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
53
2
11.6 fit_str함수를 구현해 봤습니다.
1
53
2
11.5 코드 구현
1
67
2





