#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define INDEX 1000
#define LENGTH 17
void main(void)
{
int n,i;
char dictionary[INDEX][LENGTH];
scanf(\"%d\",&n) ; ----------------->(1)
for(i=0; i<n; i++)
scanf(\"%s\",dictionary[i]); -----------> (2)
for(i=0; i<n; i++)
printf(\"%s \",dictionary[i]);
}
위 소스코드에서
입력을
6
a
b
c
d
e
f
했을 경우에 출력이 a b c d e f 가 되는데
(2)를 gets로 변경해서 받을 경우에
출력이 b c d e f 가 됨..
그 이유가 (1)에 scanf에서 값을 입력하고 엔터를 치면 버퍼에 엔터(\'\\n\',개행)가 남아있어서
scanf를 했을 경우에는 버퍼에 있던 개행을 입력받은다음 그 다음에 입력을 받아도 값이 정상적으로 변수에 들어가기 때문에
정상 출력이 되는거고, gets는 버퍼에 있던 개행을 입력받기만하면 끝나버리니깐 변수에 개행이 들어가기 때문에
위 같은 결과가 나오는거지?
스스로 해결하시는 환자분이 오셧당께
그런거같음 (1) 끝난후에 fflush(stdin)하니까 gets_s로 고쳐도 정상작동함
fflush stdin 좀 쓰지말자
그래서 fflush() 를 쓰는건가
scanf나fflush쓰면 피곤해진다