c언어 질문잇숩니다~

char str[2000];
scanf("%[^\n]", str);
printf("%s", str);

char str1[2001];
fgets(str1, sizeof(str1), stdin);
printf("%s", str1);

위의 코드에서 먼저 문자열을 입력을 하고

str버퍼에 문자열이 저장된 후

fgets함수로 str1버퍼에 문자열을 다시 입력받고자 위의 코드를 작성하였는데

str1버퍼에도 str에 들어간 문자열이 들어가집니다.

스트림과 관련된 것 같은데 fflust(stdin)이 작동되지 않습니다. 어떻게 해결해야 되나요? ㅠㅠ

1답변

  • scanf에서 입력을 받을때 버퍼에는 다음과 같이 저장됩니다.

    "(입력한 문자열)\n"그리고 str에 문자열을 넘기고 버퍼에는 개행문자만 남게 됩니다.

    fgets에서는 개행문자만 str1만 넘겨주게 되는 것입니다.

    그러면 두번째 출력은 개행문자가 되겠네요.

    새로운 입력을 받고 싶다면 다음과 같이 코드를 작성하는 것이 좋을 것 같습니다.

    char str[2000];
    scanf("%[^\n]", str);
    printf("%s", str);
    
    getchar();    //버퍼의 개행문자를 지움
    
    char str1[2001];
    fgets(str1, sizeof(str1), stdin);
    printf("%s", str1);
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.