ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 열강(몇일째인지...)
    backup/c,c++ 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 기능과 같음)

Designed by Tistory.