소프트웨어/C 언어

[C언어]07. 컴퓨터와 첫대화, 기본 입력과 출력 에 대하여 알아보자. (printf, scanf)

리습 2013. 6. 4. 08:30





 안녕하십니까. 리습입니다.


 지금까지 데이터를 저장할 수 있는 변수 라는 것과 기능을 정의하여 사용하는 함수라는 것을 배워보았습니다. 그렇다면 이제 여러가지 함수들에 대하여 배워볼 차례입니다. 우선 기본적인 변수에 데이터를 넣고 화면에 출력해주는 함수들부터 알아보도록 하겠습니다. 먼저 배워볼 함수는 printf 와 scanf 입니다. 이 함수들은 C언어의 표준 함수로써 모든 C언어를 배우는 사람들이 가장 먼저 배우는 함수입니다. 기본적으로 printf와 scanf는 서식을 이용한 입출력 함수이며, 이는 "어떠한 형식을 받아들인다 내보낸다를 미리 선언한후 그에 맞게 받아들이고 내보내 주는 것"을 뜻합니다.

 

 우선 printf의 형태부터 알아보도록 하겠습니다. ( <>로 표시된건 하나로 보시면 됩니다. )



1. 쓰고싶은 말과 서식 문자 : " " 안에 문자를 입력 하고 어떤 데이터를 표시하고 싶을때 입력합니다.

   

여기서 우리는 서식문자라는 것을 잘 알아야 합니다. 서식문자는 다음 표를 보면 알수 있습니다.    

 

 서식문자

뜻 

 %d , %i

10진수의 정수로 출력하겠다. 

 %u

부호 없이(절대값) 10진수의 정수로 출력하겠다. 

 %o

 8진수의 정수로 출력하겠다.

 %x , %X

16진수의 정수로 출력하겠다.(대문자로 하면 대문자로출력) 

 %c

한개의 문자를 출력하겠다. (알파벳같은 것)

 %s

문자를 출력하겠다. 

 %f

고정 소수점 방식으로 실수를 출력하겠다. 

 %e , %E

부동 소수점 방식으로 실수를 출력하겠다.

 %g , %G

%f, %e 중 짧은 방식으로 출력하겠다. 

 %p

포인터가 가진 값 자체를 출력하겠다.(주소값) 

 %n

 출력된 문자개수를 포인터 변수에 더하겠다.

 %%

%문자 자체를 출력한다. 

 

 이중 앞으로 우리가 많이 쓰게될 형식은 %d 와 %c , %s 등이므로 이것들은 잘 기억해야합니다.

 

ex) printf ( "안녕하십니까 %d번째 인사입니다. " , <데이터> )

 

2. <첫번째 서식문자의 데이터> ...) : 이제 서식문자에 어떤 데이터를 넣을지 차례대로 써주는 것 입니다. 만약 정수형 타입의 서식 문자를 사용하였다면 정수형 변수의 이름을 넣어주면 됩니다. 그러면 그 정수형 데이터에 있는 값을 읽어 출력합니다. 여러개의 서식문자를 썼다면 여러개의 데이터를 차례대로 써주면 됩니다.

                                                      

ex) int a = 10; printf ( "안녕하십니까 %d번째 인사입니다. " , a );

 

그리고 참고로 문자를 출력시킨다면 화면에 한줄로 나오기 떄문에 한칸을 띄어쓸 필요가 있습니다. 그것이 바로 \n(역 슬래쉬 이지만 저 모양으로 나옵니다. ) 입니다. \n을 쓰게되면 문자열이 한칸 뒤에 출력되게 됩니다.

 

그렇다면 예를 하나 들어보도록 하죠.

 


 코드

 #include <stdio.h>

int main()

{

    int a = 10 , b = 20 , c;

    c = a + b;

    printf ( " %d + %d = &d 입니다. \n " , a, b, c );

    return 0;

}

결과

 

10 + 20 = 30 입니다.

 

  

 서식문자와 변수 3개를 사용하여 더하기를 하는 모습을 출력한 것입니다. 이런식으로 printf를 사용하여 화면에 자신이 필요한데로 문자등을 출력하면 됩니다. 참고로 서식문자에는 어떠한 형식을 출력할 것인가 말고도 어떻게 출력할 것인가 라는 것도 표현할 수 있습니다. 한번에 예로 표현하도록 하겠습니다.

 

 코드

 #include <stdio.h>

int main()

{

    int a = 12345;

    float b = 0.12345;

    printf ( " |%d| \n " , a);

    printf ( " |%10d| \n " , a);

    printf ( " |%010d| \n " , a);

    printf ( " |%-10d| \n " , a);

    printf ( " |%f| \n " , b);

    printf ( " |%.3f| \n " , b);

    printf ( " |%10.3f| \n " , b);

    return 0;

}

 결과

 

|12345|

|    12345|

|0000012345|

|12345     |

|0.123450|

|0.123|

|     0.123|

 

 

 즉 서식문자 사이에 정수를 쓰면 전체 칸 수를 지정할수 있고 정수 맨앞에 0을 붙일경우 빈칸에 모두 0을 넣는다. 또한 그앞에 -를 붙이는 경우 오른쪽 정렬이 아닌 왼쪽 정렬을 하게됩니다. . 을 찍는 경우 소수점 몇째 자리까지 표현할건지 적어주며 동시에 반올림합니다. 이를 잘 조합하면 여러가지 표현을 만들수 있습니다. 참고로 %f에서  소수점 밑 6자리가 나온것은 %f가 원래 저렇게 출력해서 입니다.

 


 

 출력하는 것을 배웠으니 이제 입력하는것을 알아보도록 합시다. 입력을 할 때는 scanf라는 것을 사용합니다. scanf 의 형태입니다.

 

 

 1. <받을 데이터 서식문자> : 받고싶은 데이터의 형식을 적어줍니다.예를들어 정수형 데이터를 받고싶으면 %d를 적어줍니다.

                                        

 ex) scanf ( "%d" , &<변수이름> );

 

 2. <변수이름> : 받을 변수의 이름을 적어줍니다. 여기서 중요한 것은 변수 앞에 & 를 붙여주는 것입니다. 이것의 의미는 나중에 더 배우고 알아보도록 하겠습니다.

                      

ex) scanf( "%d", &a);

 

사용 예를 보도록 하겠습니다.

 

 코드

 #include <stdio.h>

int main()

{

    int a

     printf ( "입력하고 싶은 정수 숫자를 적어주십시오 : \n")

    scanf("%d" , &a); 

    printf ( "입력하신 숫자는 %d 입니다. \n ", a );

    return 0;

}

결과

 

입력하고 싶은 정수 숫자를 적어주십시오 :

10

입력하신 숫자는 10 입니다.

 

 

scanf 는 많이 사용 되지는 않습니다. printf의 경우 서식문자로써 앞으로도 계속 쓰이게 되기때문에 익숙해지시는게 좋지만 scanf는 우리가 학습용 이상으로 쓸일이 없습니다. 하지만 당분간 주력 함수가 되므로 잘 익히도록 하는것이 좋겠습니다.

 

 

참고 . printf는  프린트에프 라고 읽으며 scanf는 스캔에프 라고 읽습니다. 프린트프 , 스캔프 라고 읽는다고 아무도 뭐라고 하진 않지만 올바르게 읽는것이 더 의사소통에 좋습니다. 참고로 f는 format 포멧을 의미합니다. 서식문자를 사용하기 떄문이죠

참고 . cout cin 등 더 쉬운 입출력 함수들이 있다. 몇몇 책이나 수업중에도 이 함수들을 사용하는데 더 쉽고 편하긴 하지만 아직 공부한 c의 개념이 아닌 c++의 개념이 필요하기떄문에 (사용엔 필요없지만 이해에는 필요) 당분간은 사용하지 않도록 하겠습니다. 추후에 C++ 부분 (결국은 c문법의 확장) 을 익히게 되면 그떄부터 본격적으로 편하게 사용하도록 하겠습니다.

참고. 우리가 현재 보는 컴퓨터는 그래픽 기반의 운영체제 입니다. 모든것을 화면을 보고 처리를 하게 되는데 이는 화면 처리를 위해 학습에 불필요한 여러가지를 더 해야하기 떄문에 공부하는데 더욱더 직관적인 콘솔을 사용하고 그에 맞는 함수를 사용하는 것입니다. 후에 윈도우 프로그래밍 혹은 그래픽 프로그래밍을 할때 더욱더 자세히 할 것 입니다.