c언어 질문잇숩니다~

조회수 781회
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);
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)