그래서 :입력 문자가 버퍼에 끼어 들지 않도록하려면 어떻게해야합니까? 그때 주어진 작업을 수행할지 여부를 결정하기 위해 사용자에서 옵션을 읽고 있어요 다음과 같은 코드에서 C
printf("Do you want to execute %s: ", exe);
char input = getchar();
if (input == 'y') {
return execute(exe);
} return 0;
나는 데 문제가를 그 라인 char input = getchar()
문자 후 (내가 엔터 키나 개행을 가정하고있어)가 stdin
에 걸리면 내 execute()
함수에서 fgets()
(읽는 중 stdin
)을 호출하면이 멈추어진 문자를 먹어 버리고 사용자에게 필요한 입력을 요구하지 않습니다.
execute()
를 호출하기 전에 호출하면 나를 위해 어떤 길잃은 문자를 '먹고'하는
void iflush() {
int c;
while ((c = getchar()) != EOF && c != '\n') {
continue;
}
}
을 다음 함수를 정의 할 수 있습니다 ...이 문제를 해결합니다. 그러나 이것이 왜 처음에 발생하는지 궁금해졌습니다. char
을 stdin
에서 가져 오는 더 적절한 방법이이 길잃은 문자를 일으키지 않고 내 다른 방법을 엉망으로 만들 수 있습니까? 나는 C에게 매우 익숙하며, 좋은 습관을 배우고 싶어합니다.
단순한 경우에도 일부 프로그램의 오류를 방지하기 위해 도우미 메서드를 추가해야한다는 것이 이상하게 보입니다. 나도 같은 문제가 있지만 fgetc()
을 사용해 보았습니다.
당신은 시도해 봤어'FFLUSH (표준 입력)'는'getchar가()'호출 문 다음에? – VHS
그래, 아무 것도하지 않았어 – transiti0nary
@VHS 정말 나쁜 조언 인 줄 알아? 'fflush (stdin);'은 정의되지 않은 동작을 호출합니다. –