4월, 2025의 게시물 표시

C - printf와 scanf 사용 방식의 차이점 및 흔한 실수

1. printf에 &(ampersand / 주소 연산자)를 사용하는 실수 1 2 int  i  =   10 , j  =   20 ; printf ( "%d %d\n" ,  & i,  & j); cs printf는 단순히 변수의 값(value)을 출력하는 함수 그런데 위 코드처럼 &를 변수 앞에 붙이면 변수의 주소(address)가 출력됨 따라서 printf에서 &를 사용하면 해당 변수의 주소값을 출력함 printf의 올바른 사용은 아래와 같다. 1 printf ( "%d %d\n" , i, j); cs 반대로 scanf는 입력받은 갑슬 변수에 저장해야 하므로 변수의 주소가 반드시 필요하다. 2. scanf의 포맷 문자열에 불필요한 문자를 넣는 실수 1 scanf ( "%d, %d" ,  & i,  & j); cs %d, 에서 쉼표는 숫자(정수) 다음에 ,(쉼표)가 입력력되어야 한다는 의미 하지만 사용자가 10 20 이렇게 쉼표 없이 입력하면, scanf는 10을 첫 번째 %d로 읽고, 그 다음 명시한대로 쉼표를 찾으려고 하지만 공백(white-space)이므로 그대로 종료한다. 결과적으로 j에는 값이 들어가지 않고, 이전 값 그대로이거나 쓰레기 값이 남을 수 있다. scanf는 포맷 문자열에 명시된 문자 그대로 입력할 것을 기대한다. 3. scanf 포맷 문자열에 \n을 넣는 실수 1 scanf ( "%d\n" ,  & i); cs \n은 scanf 입장에서 공백 문자로 간주된다. scanf는 다음 숫자를 읽은 후에도 공백이 아닌 문자가 나올 때까지 계속 기다린다. 즉 사용자가 Enter를 여러번 눌러도 계속 입력을 기다린다.