본문 바로가기

프로그래밍/C & C++

[C] 3. 표준 입출력과 주석

1. 출력함수 printf

C 에서는 다양한 출력함수를 제공하지만, 가장 간단하고, 먼저 접근하게 되는 출력함수는 printf 함수일 것이다. printf 함수는 stdio,h에 선언되어 있고, 따라서 우리는 이 함수를 사용하기 위해서 #include<stdio.h>와 같이 stdio.h 파일을 include 해준다. printf의 함수를 어떻게 사용하는지 알아보자.

int printf ( const char * format, ... );

printf의 함수의 선언은 위와 같다. format의 내용을 stdout으로 console창에 띄워주는 역할을 한다. 출력하고자하는 format에는 앞서 배운 형식 문자(format character)를 사용할 수 있다. printf함수는 format에 형식 문자가 존재하면, 형식 문자의 개수만큼 parameter를 입력받는다. 그리고 parameter 순서대로 format의 형식 문자에 대응시켜 stdout으로 출력해준다.


아래와 같은 프로그램을 실행시켜보자.

printf("...foo...%d...bar...%c...",num, character);

실행결과는 다음과 같을 것이다.


printf함수는 format 부분에 사용되는 형식 문자의 조금의 변형을 통해서 더 많은 출력옵션을 줄 수 있다.

%[flags][width][.precision][length]specifier

%d, %s와 같은 형식 문자는 위의 타입을 이용해서 변형할 수 있다. specifier에는 c, d, f, s와 같이 데이터 type을 명시하는 문자가 사용된다. 

- flags에는 아래와 같은 문자가 올 수 있고, 각각의 역할은 다음과 같다.

+ : 정수와 실수의 출력에서 사용된다. +flag를 사용하는 경우에는, 정수나 실수의 부호를 표시해준다.

- : 주어진 공간에서 왼쪽정렬을 해 출력한다. -flag를 사용하지 않는 경우 기본적으로는 오른쪽정렬이다.

0 : 정수와 실수같은 숫자의 출력에 있어서, 할당한 공간 중 남는 앞부분을 0으로 padding한다. %05d를 사용하는 경우, 5개의 공간을 할당하고, 5자리 짧은 수를 출력할 때 앞부분에 0을 붙인다. 123은 00123과 같이 출력된다.

- width에는 숫자가 입력될 수 있다.

width에 입력된 숫자만큼 출력될 공간을 할당해준다. 즉 %20s와 같이 쓰는 경우, 최소한 20개의 공간을 할당해 남은 부분은 공백으로 표시된다. 할당된 width보다 넘는 경우는 그대로 출력된다.

- .precision 부분에도 .과 함께 숫자가 입력될 수 있다.

이 부분이 하는 역할은 특히 소수점이 존재하는 실수인 경우에, 소수점 아래 몇자리까지 표시할지 알려주는 역할을 한다. 기본값은 6으로 설정되어있다.


참조 : http://www.cplusplus.com/reference/cstdio/printf/


2. 입력함수 scanf

마찬가지로 C 언어의 다양한 입력 함수 중, 가장 먼저 접근하고 쉽게 사용할 수 있는 함수가 scanf 함수이다. scanf 함수도 printf함수와 마찬가지로, stdio.h에 포함되어 있다. scanf 함수는 stdin으로 입력받은 값들을 변수에 저장한다.

int scanf ( const char * format, ... );

scanf 함수의 선언은 위와 같다. format에 해당하는 부분을 stdin으로부터 입력받고, 그 값들을 뒤에 parameter로 오는 변수에 저장한다. 뒤에 오는 parameter 변수에는 모두  &를 붙여주어야 한다.(이는 scanf가 호출된 함수 내의 지역변수와 같은 지정된 메모리를 할당하고 있는 변수에도 값을 저장해주기 위함이다. 만약 scanf의 parameter가 포인터 변수가 아닌 일반 변수였다면, scanf함수 호출시 생성되는 stack에 저장되었다가 사라질뿐, 그 값이 scanf를 호출한 곳의 변수에는 저장이 되지 않을 것이다.) scanf 함수의 return 값은 format으로 받은 데이터가 parameter에 할당되는 개수가 된다. 즉 scanf("%d %d",&num1,&num2);라고 쓰고, 입력을 1 2 와 같이 했다면, scanf의 함수는 2를 반환한다.


scanf의 format에서도 형식 문자를 사용한다. format의 데이터가 어떤 데이터 타입인지 알려주는 역할을 한다.

%[*][width][length]specifier 

위와 같은 형태로 형식 문자에 변형을 줄 수 있다. 

- *옵션을 주는 경우, format에서 그 데이터타입의 데이터를 무시한다. scanf("%*d") 와 같이 사용하는 경우, 123 과 같은 정수를 입력했을 경우, 그 정수를 무시한다.

- width 옵션은 입력받는 최대 길이를 결정할 수 있다. width보다 넘치는 데이터는 무시하게 된다.


참조 : http://www.cplusplus.com/reference/cstdio/scanf/


3. 주석(Comment)

프로그램을 작성하면서, 자신 혹은 타인에게 프로그램을 설명할 필요가 있을 때가 있다. 특히 다른 사람들의 코드 이해를 돕기 위한 목적으로 주석(comment) 기능을 이용한다. 프로그램이 짧고,  프로그램의 logic이 복잡하지 않은 경우에는 comment가 불필요하다고 느낄수 있다. 하지만 큰 규모의  프로그램을 작성하는 경우에는 혼자서 개발이 힘든 경우가 많고, 여러 명의 프로그래머들이 함꼐 개발하는 경우가 많다. 따라서, 코드의 가독성(readability)도 중요하며, 자신의 코드를 설명할 필요가 있다. 이런 부분을 코드와 함꼐 설명해주기 위해서 comment를 사용한다. comment를 사용하는 것은 습관이기에 처음부터 간단한 코드이더라도 comment를 다는 습관이 중요하다.


C 언어에서는 주석기능을 두 가지의 방법으로 지원한다. /* */를 이용하는 방법과 //를 이용하는 방법이 있다.

/* */ : /*로 시작해서 */로 닫는 방법으로 사용한다. 두 토큰 사이의 모든 내용은 주석 처리되어 컴파일러가 인식하지 않는다.

// : 컴파일러는 //뒤로 오는 한 줄 이내의 내용을 주석으로 이해하며, 코드로 인식하지 않는다.

반응형

'프로그래밍 > C & C++' 카테고리의 다른 글

GDCM 설치와 Visual Studio 2017에서 사용하기  (0) 2019.06.19
[C] 4. 표현식(Expression)  (0) 2017.02.03
[C] cf. 형식문자(Format Character)  (0) 2016.12.28
[C] cf. ASCII CODE  (0) 2016.12.28
[C] 2. C 언어의 자료형  (0) 2016.12.25