프로그래밍

 3198, 1/160 회원가입  로그인  
   jsk0612
   C로 프로그램을 짜다가 의문점이 발견되어서 질문 올립니다.

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


int main()
{
  char array[100];
  int N;
  int i;

  scanf ("%d", &N);

  for (i = 0; i < N; i++)
  {
     scanf ("%c", array[i]);
     printf ("i = %d\n", i);
  }
}

이렇게 했는데 왜 i값이 2씩 증가되는거죠?

그리고 scanf 를 문자(%c)형식이 아닌 문자열(%s)로 하면

i값이 1씩 증가하네요..

왜 문자형식으로 하면 i가 2씩 증가할까요?

  Hit : 4487     Date : 2011/02/11 10:29



    
jsk0612 for문 내에 printf ("%d" array[i]); 를 삽입했더니

아스키코드 10번(LineFeed)가 출력되네요..

문자 형식으로 스캔하면서 하는 방법은 없나요?
2011/02/11  
lMaxl04 gets 2011/02/11  
jsk0612 scanf 만 써서 하는 방법은 없을까여;; 2011/02/11  
별빛을담아 널값을 같이 받아서 2씩 증가하는거 아닌가요? 2011/02/11  
puRin fflush() 함수를 알면 쉬워요. i가 2씩 증가하는 이유가 있죠. 밑에 보시면 압니다.

#include <stdio.h>

int main(void)
{
char array[100] = {0, };
int N;
int i;

scanf ("%d", &N);

fflush(stdin); //요거 없으면 입력버퍼에 '\n' 개행문자가 그대로 남습니다. fflush로 지워주세요.

for (i = 0; i < N; i++)
{
scanf ("%c", &array[i]); //&붙여주시구요.

fflush(stdin);
/*이거 없으면 i가 2번 증가하죠?? 왜냐하면 scanf는 딱 우리가 입력한 정수만 받아들이는 데, 그 후에 우리가 Enter key를 누르면 '\n' 요게 입력버퍼에 남아요. 그러면 다음 for문 때, scanf가 입력버퍼에 남아있는 '\n'를 가져가요. 그래서 우리가 다음 문자를 입력하기도 전에, 먼저 scanf는 '\n' 받고, 그 다음 줄로 내려갑니다. 그래서 printf ("i = %d\n", i); 이게 두번 실행되는 겁니다.*/

printf ("i = %d\n", i); //
}

printf("%s\n", array);

return 0;
}


예를 들면, N을 10으로 잡아봅시다.
<<출력화면>>
10
a
i = 0
b
i = 1
c
i = 2
d
i = 3
e
i = 4
f
i = 5
g
i = 6
h
i = 7
i
i = 8
j
i = 9
abcdefghij

어떄요, 참 쉽죠...?-_ -ㅋㅋ
2011/02/11  
jsk0612 아.. 제가 숫자랑 문자열이랑 너무 같다고 생각했군요,,

덕분에 알려주신 정보를 기초로 더더욱 열심히 공부해 나가겠습니다.

댓글 달아주신분 모두 감사합니다.
2011/02/15