whgusfud   8년 전

1. fflush(stdin)
2. rewind(stdin)
3. while(  (c = getchar()) != '\n' && c != EOF)

rewind는 간편해서 좋아보이는데... 제대로 동작하지 않는 경우 있나요?

3번의 경우는 다들 가르치는 만큼, 문제가 없을 거 같긴 한데...

luluctrl4   8년 전

fflush(stdin)이 괜찮은거 같은데

그건 window에서만 되는거라 많은 채첨 사이트에서는 효과없는거 같고..

전 그 fgets로 한줄 통째로 받고 sscanf로 받는 것도 나쁘지 않은거 같아요

yukariko   8년 전

입력버퍼를 비워야하는상황은 어떤상황인가요?

대부분의 입력은 scanf 와 공백을 이용하여 받을 수 있습니다.

whgusfud   8년 전

아.. 상황설명이 제대로 안됐네요.

엔터키로 입력받는 경우입니다~

yukariko   8년 전

줄 단위로 입력을 받는 방법은

gets 함수를 이용하시면 됩니다.

그와 달리 뭔가 특수한 케이스가 있으신가요?

whgusfud   8년 전

scanf 함수를 이용해서 입력을 받을 때, 엔터키로 입력을 마감하는 경우 입니다.

gets 함수를 쓰면 이런일이 없나요??

대회에서 scanf를 쓰지 못하게 하는 이유가 있나보네요.

yukariko   8년 전

음 질문이 좀 난해해서 그런데

scanf("%s");

가 입력을 줄단위로 받지않고 띄어쓰기 단위로 받는데

이걸 줄단위로 받고싶다는 말씀이신가요?

그렇다면 gets함수로 받아올 수 있구요.

줄단위로 받을때, 줄에 내용이 없을때까지 반복하는것은

while(gets(a), a[0]) 같은 방법으로 받을 수 있구요.

대회에서 scanf를 쓰지 못하게 한다는건 저는 처음들어보네요..

yukariko   8년 전

참고로 scanf(" %s") 같이 앞에 공백울 붙여주면

공백이나 개행같은 버퍼를 무시하고 입력을 받아올 수 있습니다.

whgusfud   8년 전

죄송합니다. 질문이 많이 난해합니다 ㅠㅠ

char c; int a;

scanf("%d",&a);
scanf("%c",&c);

이 경우, 10진수 정수 a를 입력받고 엔터를 누를경우 개행문자가 남아있어 char형 c 변수 입력을 건너띄게되는 문제를 해결하는 방법 중 어느것이 좋은 지에대한 질문이었습니다. %s의 경우와는 다르게, 하나의 문자만을 입력받는 경우입니다.


yukariko   8년 전

아 이해했습니다.

그런경우는 scanf(" %c",&c); 처럼 앞에 공백을 붙여주면 %d 이후의 공백문자열이 제거가 됩니다.

제가 지금까지 문제를 푸는 과정에서는 scanf, gets 이외의 입력함수를 사용하지 않아도 문제가 없었습니다.

따라서 저 두 함수를 잘 이용하시면 될 것 같습니다.

whgusfud   8년 전

감사합니다 ㅎㅎ

맨 처음 질문에 1번은 표준이 아니고, 2번또한 어딘가에 문제가 있다고 들었습니다. 3번은 귀찮고.... 앞으로는 scanf(" %c")를 애용해야겠네요.

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