프로그래밍

 3198, 1/160 회원가입  로그인  
   영원한공부
   [C언어] scanf함수와 gets함수에서 \n문자 질문이요.

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3014 [복사]


제가 scanf함수는 엔터를 입력할 때 들어가는 \n문자를 무시하고, gets함수는 그 \n도 읽는다 라고 알고

있었는고 getchar()함수 써서 확인까지 했는데요.

나중에 scanf랑 gets함수로 "12345"를 입력해서  strlen()함수를 써봤더니 둘다 문자열 길이가

5가 나오네요.

scanf는 맞는 것 같은데 gets함수는 \n문자도 읽었으니까 6이어야 하는거 아닌가요?

  Hit : 7101     Date : 2011/05/25 02:32



    
rgogor scanf가 무시하는 \n문자는 버퍼에 들어갑니다.
따라서 '12345\n'(\n는 ENTER)를 입력하게 되면 12345가 해당 문자열에 들어가고 \n는 버퍼에 남게 됩니다.
gets함수는 12345를 \n를 만날때까지 입력으로 받고 \n는 버퍼에서 지워버립니다.

아래 코드를 실행해 보시면 이해가 빠를겁니다.

#include <stdio.h>

void main()
{
char a[10];
scanf("%s",a);
printf("scanf : %s",a);
gets(a);
printf("gets : %s",a);

}

scanf에서 12345\n를 입력했다면 12345는 a에 들어가고 바로 gets를 만났을떄 버퍼에남아있던 \n가 뛰어나와서 a배열에는 NULL값만 들어가게 됩니다.

공대생이라 이해가 빨리 되도록 글을 못쓰겠네요. ㅜ_ㅜ
2011/05/25  
영원한공부 한번에 이해했어요. 공대생이시라 설명이 논리적이고, 합리적이고, 스무스하고, 깔끔하고,

효울적이고, 군더더기가 없네요. 감사합니다 ^.^
2011/05/26