junyoung292   7년 전

두개의 코드모두 같은 결과를 나타내는 것으로 보이는데

위의 코드는 틀리는 반면 아래의 코드는 맞는것으로 결과가 나타납니다

무슨 차이인지 잘 모르겠습니다

아시는분 계시면 설명 부탁드리겠습니다.

sgchoi5   7년 전

fflush(stdin); 는 왜 하는 건가요? online judge 에 제출하는 코드 중에 fflush(stdin); 는 사용되는 걸 본 적이 없네요..


첫 번째 코드는 getchar() 로 받는 첫 번째 char 가 숫자가 아니라 enter 입니다. 그래서 틀리게 되는 것이고요.

두 번째 코드는 getchar() 로 받는 첫 번째 char 를 배열 0 에 넣고 나중에 더 할 때에 index 가 1 부터 n 까지 더하고 있고요. 그래서 맞습니다.


입력 처리시에 %d 를 계속 이용하는 경우에는 enter 유무를 skip 하고 integer 만 받을 수가 있는데,

이런 류의 문제는 n 은 %d 로 다 얻고, 다음 부터 숫자 1 개씩 (enter 무시) 얻기 위해서 %1d (1 개의 숫자만 꺼내서 int 에 저장) 해주시면 편합니다.


입력을 처리하는 여러 가지 방식을 잘 고려해 보시길 바래요~~~ : )


junyoung292   7년 전

감사합니다.

추가 질문 드리겠습니다.

fflush를 사용한 것은 위에서 말씀하신것 처럼 char에 enter가 들어가는 것을 방지하기 위해 사용하였습니다

디버깅 해본 결과 fflush를 사용하였을경우 char의 첫번째 원소부터 입력된 숫자가 저장되는 것을 확인하였습니다.

물론 사용하지 않아도 크게 무리는 없지만 이왕이면 정확하게 이해하고 싶어서 질문 드리겠습니다.

ps. 정말 감사드립니다.

sgchoi5   7년 전

fflush() 는 채점 서버에서 어떤 영향을 줄 지 잘 모르겠네요.. 동일 환경에서 해 보셔도 잘 되면 상관없겠지만, 이런 입출력에 영향을 주는 함수는 안 쓰는게 (안 써도 되는 거니..) 맞는 것 같네요.

junyoung292   7년 전

아 추가로 첫번째 댓글에서 설명해주신 %1d 를 사용하여 입력받는 방법으로 작성해본 결과 훨신 간단하고 깔끔한 코드를 작성하였습니다.

정말 감사합니다.^^


3587jjh   7년 전

채점할때 fflush 쓰면 안되는걸로 알고있습니다

댓글을 작성하려면 로그인해야 합니다.