gets함수에 대한 질문입니다!

godnpeter Reply 7 years 5 weeks ago
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { char ans[81]; int i; scanf("%d", &i); getchar(); for (int k = 0; k < i; k++) { gets(ans); getchar(); int n = 0; int flag = 0; int result = 0; while (ans[n] != '\0') { if (ans[n] == 'O') { flag++; result += flag; } else flag = 0; n++; } printf("%d\n", result); } return 0; } 현재 이러한 코드를 사용하고 있는데 궁금한게 제가 gets 함수 뒤에 getchar를 넣은 이유는 gets함수에 문자배열을 입력시킨 다음에 \n을 하게 되는데 그 \n을 입력하기 위함입니다. 허나 막상 작동을 시켜보니 생각한대로 getchar에 \n이 들어가는 것이 아니라 또 다른 값을 입력받게 됩니다. 왜 그런가요?
pichulia Reply 7 years 4 weeks ago
gets가 \n까지 읽고 버리기 때문입니다. 예를 들어 입력에 asdf\n fdsa\n 이렇게 되있고 gets(ans); getchar(); 를 쓰게되면 gets가 "\n"까지 읽어낸 다음에 이 \n을 안쓰고 버려서 ans에는 "asdf"가 저장되게 되고 getchar는 다음줄에 있는 문자 'f'를 읽게 됩니다.