|
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ㅜ
: 정말 죄송합니다...
|