C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[38029] Re:Re:여러분께서 해주신거 다 했는데 안되네요..ㅠ0ㅜ
알파 [alpha] 1113 읽음    2004-11-13 13:11
getch() 같은 경우는 콘솔 버퍼를 이용하지 않는 걸로 알고 있습니다.

그래서 입력 받자 마자 바로 출력하죠.



문제가 되는 경우는 콘솔 버퍼 이용시 공백문자(개행, 스페이스 ...) 등이 콘솔 버퍼에 남아 있을 경우 입니다.
Ex. fgets, scanf, gets ...

따라서 콘솔 버퍼를 이용하는 함수들은 버퍼에 문자가 남아 있을 경우 이를 읽어 들여 오작동을 하게 되죠.

scanf 나 gets 사용 전에

버퍼를 비우는 명령인

rewind (stdin)

이나

fflush (stdin)

등을 기술해 주세요.


ps.

max 값만 찾으려면 첫 번째 입력받은 값을 기준으로 이보다 더 크면 교체하는 방식을 사용하세요.

이러면 배열을 이용하지 않아도 되겠죠.


ps2.

scanf 에서 "%c" 같은 경우는 공백 문자도 문자로 취급하는 것으로 알고 있습니다.

공백 문자가 남아 있는 것으로 생각되네요.


ps3.

문자를 입력받기전 오작동이 의심되면 rewind (stdin) 등을 적극적으로 사용하세요.

그러면 문제는 없을 듯 ...

ex.

fflush (stdin);
scanf ("%c", &temp);





파란하기스 님이 쓰신 글 :
: 첫번째 방법..
:
: #include <stdio.h>
: #include <conio.h>
:
: void main()
: {
:     printf("이 프로그램은 N개의 숫자중에");
:     printf("최대값을 출력하는 프로그램 입니다.\n\n\n");
:    
:     int score[100], i, input, max;
:     char temp;
:    
:
:     while(1){
:    
:     printf("몇개를 할지 입력해주세요. >> ");
:     scanf("%d",&input);
:     for(i=0;i<input;i++){
:         score[i] = 0;}
:
:     max = 0;
:    
:     for(i=0;i<input;i++){
:         printf("수를 입력해주세요. %d >> ",i+1);
:         scanf("%d",&score[i]);
:         max = (max > score[i]) ? max : score[i];
:     }
:     printf("최대값은 %d 입니다.\n\n\n\n",max);
:
:     printf("만약 계속하시려면 아무키를,");
:     printf("그만 하시려면 N 이나 n 키를 눌러 주세요.");
:
:     scanf("%c",&temp);
:     getch();
:
:     if(temp == 'N' || temp == 'n')
:         break;
:     }
:    
:     printf("\n\n\n\n");
: }
:
: 두번째방법
: #include <stdio.h>
:
: void main()
: {
:     printf("이 프로그램은 N개의 숫자중에");
:     printf("최대값을 출력하는 프로그램 입니다.\n\n\n");
:    
:     int score[100], i, input, max;
:     char temp[100];
:    
:
:     while(1){
:    
:     printf("몇개를 할지 입력해주세요. >> ");
:     scanf("%d",&input);
:     for(i=0;i<input;i++){
:         score[i] = 0;}
:
:     max = 0;
:    
:     for(i=0;i<input;i++){
:         printf("수를 입력해주세요. %d >> ",i+1);
:         scanf("%d",&score[i]);
:         max = (max > score[i]) ? max : score[i];
:     }
:     printf("최대값은 %d 입니다.\n\n\n\n",max);
:
:     printf("만약 계속하시려면 아무키를,");
:     printf("그만 하시려면 N 이나 n 키를 눌러 주세요.");
:
:     gets(temp);
:
:     if(temp[0] == 'N' || temp[0] == 'n')
:         break;
:     }
:
: 세번째방법
: #include <stdio.h>
:
: void main()
: {
:     printf("이 프로그램은 N개의 숫자중에");
:     printf("최대값을 출력하는 프로그램 입니다.\n\n\n");
:    
:     int score[100], i, input, max;
:     char temp;
:    
:
:     while(1){
:    
:     printf("몇개를 할지 입력해주세요. >> ");
:     scanf("%d",&input);
:     for(i=0;i<input;i++){
:         score[i] = 0;}
:
:     max = 0;
:    
:     for(i=0;i<input;i++){
:         printf("수를 입력해주세요. %d >> ",i+1);
:         scanf("%d",&score[i]);
:         max = (max > score[i]) ? max : score[i];
:     }
:     printf("최대값은 %d 입니다.\n\n\n\n",max);
:
:     printf("만약 계속하시려면 아무키를,");
:     printf("그만 하시려면 N 이나 n 키를 눌러 주세요.");
:
:     scanf("%c",&temp);
:
:     if(temp == 'N' || temp == 'n')
:         break;
:     }
:    
:     printf("\n\n\n\n");
: }
:
: 이렇게 다 해봤는데요,
:
: 첫번째는 getch()를 이용하여 한턴 쉬게끔 하려고 했는데..
: 역시나 이상하게 되구요..
:
: 두번째 같은경우는.. 새번째경우와 같은 현상이 됩니다.
:
: 실행을 하여 최대값을 다 구하긴 하였으나,
: 문자를 받지 못하게 되네요..
:
: "만약 --------중략-------- 키를 눌러주세요."  이것과  "몇개를 할지 입력해주세요. >> " 가 함께 나와버려요..
: 이따 n 이나 N 을 눌렀을 경우 끝나긴 하지만..
: 이건 재가 의도했던 그런게 아니라서...
: getch()를 썼을땐 저렇게 붙어 나오진 않으나, 문자를 입력받지 못하더라구요..
:
: 재가 잘못한건가요..
: 고수님들께서 모두 다 알려주셨는데.. 바보같이 재가 못하는거 같네요.. ㅠ0ㅜ
: 정말 죄송합니다...

+ -

관련 글 리스트
38010 C언어 초보의 초보적인 프로그램인데요.. 파란하기스 3184 2004/11/12
38028     Re:여러분께서 해주신거 다 했는데 안되네요..ㅠ0ㅜ 파란하기스 1160 2004/11/13
38029         Re:Re:여러분께서 해주신거 다 했는데 안되네요..ㅠ0ㅜ 알파 1113 2004/11/13
38018     Re:여러분의 답변은 정말 고맙습니다.. 그런데요.. 파란하기스 974 2004/11/13
38022         Re:Re:여러분의 답변은 정말 고맙습니다.. 그런데요.. 이성제 975 2004/11/13
38026             Re:Re:Re:여러분의 답변은 정말 고맙습니다.. 그런데요.. 파란하기스 1076 2004/11/13
38032                 Re:Re:Re:Re:여러분의 답변은 정말 고맙습니다.. 그런데요.. 이성제 993 2004/11/13
38016     Re:C언어 초보의 초보적인 프로그램인데요.. 이성제 1102 2004/11/13
38025         Re:Re:C언어 초보의 초보적인 프로그램인데요.. 구철회 929 2004/11/13
38014     Re:C언어 초보의 초보적인 프로그램인데요.. 구철회 1268 2004/11/13
38012     Re:C언어 초보의 초보적인 프로그램인데요.. 이돈진 970 2004/11/12
38013         Re:Re:C언어 초보의 초보적인 프로그램인데요.. 파란하기스 987 2004/11/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.