[질문] windows visual C++에서는 되고 우분투 리눅스 gcc에서는 안되는것 ???
안녕하세요 윈도우즈에서 프로그래밍을 하다 이번에 우분투 리눅스에서 gcc로 프로그래밍
을 하려고 준비하고 있습니다. 그런데 제가 윈도우즈 에서 도스 프로그래밍을 할때 자주 쓰
쓰던 문자열 입력 함수에서 자꾸 버퍼문제가 발생해서 이렇게 질문 올립니다. 보통 gets(),
fgets()함수를 쓸때 버퍼 문제 때문에 fflush(stdin)으로 표준입력스트림의 버퍼를 비워 주
었는데요 gcc에서는 버퍼가 비워지질 않네요 그래서 책의 예제를 그대로 해 보았지만 역시
되질 않습니다. 코드는 책의 예제 코드를 몇 번씩 확인해 보았지만 코드에는 문제가 없습니
다.(다른곳에 질문을 올리니 코드가 잘못됬다고 한분이 답변을 올리셔서 예제 코드를 다시
확인해 보았습니다.) 도대체 무엇이 문제인지 좀 도와주세요
편집기는 vi를 사용하였습니다.
1 #include
2
3 int main(void)
4 {
5 char perID[7];
6 char name[10];
7
8 fputs("주민번호 앞 6 자리를 입력하세요 : ", stdout);
9 fgets(perID, sizeof(perID), stdin);
10
11 fflush(stdin);
12
13 fputs("이름을 입력하세요 : ", stdout);
14 fgets(name, sizeof(name), stdin);
15
16 printf("주민번호 앞자리 : %s\n", perID);
17 printf("이 름 : %s\n", name);
18
19 return 0;
20 }
실행결과
주민번호 앞 6 자리를 입력하세요 : 123456
이름을 입력하세요 : 주민번호 앞자리 : 123456
이 름 :
C FAQ 12.26
C FAQ 12.26 참고바랍니다. 결론부터 말씀드리면, fflush()는 output stream에 대해서만 동작하는 것이 표준입니다. input stream을 비우는 데에 쓰는 함수가 아닙니다.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기