심심풀이로 만드는 만년달력의 버그
글쓴이: cppig1995 / 작성시간: 토, 2005/12/24 - 8:17오전
심심풀이삼아 만년달력을 만들고 있습니다.
ANSI C표준을 따르고 gcc에서 개발중입니다.
그런데 얼마전 까지는 요일표시가 제대로 안되더니
그것을 고치고 난 다음에는 (이 엄청난 버그는 출력문자열에
탭 2번 넣어서 해결했습니다.) 월표시가 제대로 안되더니
이제 모든 건 해결되고 남은건
"왜 모든 달력이 2번씩 출력될까요?"
처음것은 1번 출력되는데...
calendar.c를 실행시켜보시면 아실것이구요.
[매뉴얼]
7, - : 연감소
9, + : 연증가
3, ] : 월증가
1, [ : 월감소
표준 getchar로 구현하였으므로 RET키 필수랍니다.
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 1.73 KB |
Forums:
getchar()로 명령을 입력한 후에도 입력 버퍼에는 '\n'이 남아
getchar()로 명령을 입력한 후에도 입력 버퍼에는 '\n'이 남아 있어서 그렇습니다.
c가 char가 아니라 int인 이유에 대해서는 C FAQs Q12.1을 참고하세요.
[code:1]c = getchar[/code:1]아래 줄에
c = getchar
아래 줄에
fflush(stdin);
을 추가해주세요.입력 버퍼의 내용을 비워주는 역할을 합니다.
올해에는 꼭 노트북이 생기게 해 주세요.
입력스트림을 플러쉬하는건 말도 안되는것 아닌가요?어쨌든 더미 getc
입력스트림을 플러쉬하는건 말도 안되는것 아닌가요?
어쨌든 더미 getchar를 넣음으로서 해결했습니다.
두분 모두 감사합니다. :8
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
[quote="freesky"][code:1]c = getchar[/co
이 방법은 특정 구현체에서만 작동할 뿐 이식성이 없습니다.
C FAQs Q12.26을 참고하세요.
음.. 그렇군요..제가 공부한 책에서 두 가지 방법을 알려주던데
음.. 그렇군요..
제가 공부한 책에서 두 가지 방법을 알려주던데
한 가지는 배열을 하나 만들어 문자를 한 번 더 읽어들이는 방법과
다른 하나는 플러쉬 방법이었습니다.
코드가 깔끔해서 그 방법을 말씀드렸는데 오히려 좋지 않은 방법이군요.
어쨌든 좋은 것 하나를 배웠습니다. :wink:
올해에는 꼭 노트북이 생기게 해 주세요.
fgetc()로 다 받아들이는 것이 가장 좋은건가요? 아니면 scanf(
fgetc()로 다 받아들이는 것이 가장 좋은건가요? 아니면 scanf()에서 정규식을 사용해서 받아들이는 것이 좋은 건가요?
진리를 나의 수준으로 끌어내리지 마라.
나를 진리의 수준으로 끌어올려라. - 배꼽 중에서
[quote="dondek"]fgetc()로 다 받아들이는 것이 가장 좋
뭐 사용하는 사람 취향 문제겠지만 위에서와 같은 문제를 발생하지 않도록 하려면 그냥 scanf 에서 정규식의 맨 앞에 스페이스를 넣어 버퍼에 남아있을 수 있는 '\n' 등을 무시하도록 하는 게 더 편하지 않을까 싶습니다 (" %c" 처럼 앞에 스페이스가 들어가면 character 앞 쪽에 위치한 화이트 스페이스를 모두 무시합니다)
아니면 fgets 같은 걸로 아예 라인을 읽어들이고 sscanf 등을 이용하는 것이라던가 ncurses 에 있는 getch 를 사용하는 방법도 있겠죠
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
댓글 달기