backup/c,c++
열강(몇일째인지...)
nuKeguyS
2009. 12. 28. 23:30
동적할당을 보다가 문자열 입,출력에 대해서 깨닫게 된 것이 있다.
다들 알겠지만,,,
문자 or 문자열 입,출력함수(getc,fgetc,gets,fgets)로 입력 받으면 해당 문자(열)만 입력 받고 입력버퍼에
엔터(\n)를 남겨두게 된다.
따라서 다음 입력시엔 입력할 기회를 박탈당한다....따라서 새로운 입력 전에 fflush(stdin)으로 표준 입력버퍼를
깨끗하게 클리어 해 주어야 한다.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int len;
char* str;
printf("길이 : ");
scanf("%d",&len);
str = (char*)malloc(sizeof(char)*len);
//fflush(stdin)
printf("문자열 : ");
//fgets(str, len, stdin);
scanf("%s", str);
printf("출력 : %s \n", str);
free(str);
return 0;
}
위 코드에서 scanf("%s", str); 대신 위의 fgets(str, len, stdin); 를 사용하려면 그 위의 주석처리 된 fflush(stdin)도 함께 사용해 주어야 한다.
단, fgets에서 지정된 크기보다 2이상 작은 입력을 받게되면 엔터도 문자열 뒤에 들어가고 그 뒤에 널이 들어간다.
크기가 1만 작다면 널이 들어가고 엔터는 버퍼에 남는다.(기존 fgets 기능과 같음)