프로그래밍 언어/C언어

C언어 5. 입출력

닉네임못짓는사람 2020. 7. 10. 18:37
반응형

저번 글 까지는 데이터들을 어떻게 저장하고,

그 데이터들간에 연산을 어떻게 하는지에 대해 알아봤습니다.

 

그러면 이제 실제로 사용자가 프로그램에 값을 입력하고, 값을 눈으로 볼 수 있도록 출력해봅시다.

사실 출력은 지금까지도 계속 사용했었는데, 이번에 자세하게 설명하도록 하겠습니다.

먼저 C언어에서 가장 많이 사용되는 출력 함수는 printf입니다.

여기서 함수란 말이 생소하실 수도 있는데,

어떤 특정한 작업을 수행하는 명령어의 집합이라고 생각하시면 될 것 같습니다.

 

printf로 출력하자


printf의 사용법은 아주 간단한데, 어떤 값을 출력시킬지에 따라 조금씩 차이가 있습니다.

먼저 기본적인 방법은 printf("출력할 내용"); 과 같이 쓰시면 ""안에 입력하신 내용이 화면에 출력됩니다.

또한 여러분들이 만들어둔 변수들을 출력할 수도 있는데요,

변수를 출력하기 위해선 ""안에 변수를 출력할 곳을 지정해 주어야 합니다.

 

예를 들어 정수형 변수 a를 출력할 때 printf("% d", a)라고 입력하시면 %d의 자리에 a가 출력됩니다.

여기서 %d는 서식 지정자라고하며 출력할 변수가 어떤 자료형이냐에 따라서 달라지게 됩니다.

어떤 자료형에 어떤 지정자가 필요한지는 표를 보고 기억해주시기 바랍니다.

위와 같이 정해진 지정자를 사용하지 않으면 값을 출력할 때 정상적으로 출력되지 않습니다.

또한 지정자를 사용할 때 최대 몇 자리까지 표시할 수 있는지 지정해줄 수가 있는데요,

정수형의 경우 %5d 처럼 사용하시면 9자리수의 경우 무시하고 모두 출력하게 되고

3자리수의 경우엔 3자리 모두 출력된 뒤 나머지 두 자리는 공백으로 대체되어 출력됩니다.(123 -> __123)

 

실수형의 경우도 위와 동일하게 출력되는데, 실수형은 기본적으로 소수점 아래 6번째 까지 표시합니다.

예를 들어 123.123을 %15f로 출력하면 _____123.123000이 출력됩니다. (_는 공백)

또한 %.10f처럼 사용하시면 소수점 아래의 10번째 자리까지 표시하도록 출력한다는 의미입니다.

123.123을 %.10f로하면 123.1230000000으로 출력되고, 잘리는 부분은 반올림됩니다. (123.127, %.2f -> 123.13)  

 

그리고 기본적으로 오른쪽으로 문자가 정렬되어서 출력되는데,

%-5d처럼 사용하시면 왼쪽으로 정렬되어 출력됩니다.

코드를 통해서 실제로 사용해보도록 하겠습니다.

#include<stdio.h>

int main() {
	printf("%d\n", 10);
	printf("%10d\n", 10);
	printf("%-10d|<-여기까지공간차지\n", 10);
	printf("%f\n", 10.1234);
	printf("%15f\n", 10.1234);
	printf("%-15f|<-여기까지공간차지\n", 10.1234);
	printf("%.10f\n", 10.1234);
	printf("%.3f\n", 10.1234);
}

실제로 예제를 변경해보면서 확인해보시길 바랍니다.

 

또한 출력 시에 줄 바꿈이나 특수문자 등을 출력할 수 있도록 해주는 것이 따로 있습니다.

표를 통해 알아보도록 하겠습니다.

위의 두 가지는 설명할 필요가 없을 거라 생각됩니다.

\t는 출력할 때 tap을 눌렀을 때 띄어쓰기되는 만큼 띄어서 출력해줍니다.

나머지 세 개에 대해서는 \없이 사용하면 printf내에서 제대로 출력이 되지 않습니다.

셋 다 이미 함수 내에서 다른 곳에 사용되고 있기 때문에 앞에 \를 붙여주어야만 문자로 출력됩니다.

이것도 실제로 코드로 확인해보겠습니다.

#include<stdio.h>

int main() {
	printf("\a\n");
	printf("개행\n");
	printf("\t|<-여기까지\n");
	printf("\\\n");
	printf("\'\n");
	printf("\"\n");
}

여기까지는 출력에 대해서 알아보았고 다음은 사용자가 값을 입력하는 방법을 알아보겠습니다.

 

scnaf로 입력하자


값을 입력하기 위해서는 scanf라는 함수를 사용하는데,

정수형 변수 a에 값을 입력하기 위한 기본적인 형식은 scanf("% d", &a)이처럼 사용합니다.

""안에 지정자를 써주고, 그 지정자와 맞도록 자신이 값을 넣고 싶은 변수의 앞에 &를 붙여서 써줍니다.

&를 붙이는 이유는 scanf함수에 변수의 메모리 주소를 전해주기 때문이라고만 알아두시기 바랍니다.

 

코드를 통해서 직접 사용해보도록 하겠습니다.

int변수 a와 char변수 c를 초기화한 뒤 값을 출력하고,

scanf를 사용해 값을 입력받아 다시 출력하는 예제입니다.

#include<stdio.h>

int main() {
	int a = 10;
	char c = 'a';

	printf("a = %d, c = %c\n", a, c);
	printf("Input : ");
	scanf("%d %c", &a, &c);
	printf("a = %d, c = %c\n", a, c);
}

그런데 실제로 예제를 실행하려고 하면 아마 다음과 같은 에러가 발생하면서 실행이 안될 겁니다.

scanf함수가 취약하니 scanf_s를 사용하거나 _CRT_SECURE_NO_WARNINGS를 사용하라는 뜻입니다.

이를 해결하기 위해선 다음과 같이 해주시면 됩니다.

프로젝트 속성으로 들어가 주신 뒤

구성 속성 -> C/C++ -> 전처리기 -> 전처리기 정의에서

기존에 쓰인 글 뒤에 ;_CRT_SECURE_NO_WARNINGS;를 입력해주시고 적용해주시면

다음과 같이 정상적으로 에제가 실행되는 것을 볼 수 있습니다.

 

getchar?


scanf외에도 getchar라는것을 통해서 사용자로부터 값을 입력받을 수 있습니다.

사용법은 다음과 같습니다.

char c = getchar();

이것은 사용자로부터 하나의 문자를 입력받아 왼쪽의 변수에 입력합니다.

그럼 scanf와 getchar는 무슨 차이가 있느냐?

scanf는 하나의 문자만이 아닌 문자열을 입력받을 수도 있으며, 문자 외의 값도 입력받을 수 있습니다.

하지만 getchar는 입력받은 값을 무조건 문자로 인식하고 변수에 대입합니다.

문자열이란 'a'가 아닌 "asd"같은 여러 개의 문자로 이루어진 값을 이야기하며 ""로 묶습니다.

 

또 scanf는 값을 입력받아 변수에 저장하는데, getchar는 값을 받아서 이를 꼭 사용하지 않아도 됩니다.

char c = getchar();

위와 같이 사용하면 사용자에게 값을 입력받지만 이를 사용하지 않고 버리게 됩니다.

이렇게 하는 이유는 추후에 설명할 기회가 있으면 설명하도록 하고, 코드로 사용법을 확인해보겠습니다.

#include<stdio.h>

int main() {
	char c = 'a';
	printf("문자를 입력해주세요. : ");
	c = getchar();
	printf("c : %c", c);
}

결과를 확인하면 저는 qwe를 입력했지만 실제로 입력된 건 q 뿐인걸 알 수 있습니다.

직접 코드를 바꿔가면서 확인해보시길 바랍니다.

 

지금까지 C언어에서 문자, 숫자 등을 화면에 출력해서 보여주는 방법과

사용자가 직접 변수에 값을 입력하는 방법에 대해서 알아보았습니다.

 

다음 글에서는 조건문에 대해서 알아보도록 하겠습니다.

감사합니다.

반응형

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

C언어 7. 반복문  (0) 2020.07.11
C언어 6. 조건문  (0) 2020.07.11
C언어 4. 연산자  (0) 2020.07.10
C언어 3. 자료형  (0) 2020.07.09
C언어 2. 변수, 상수  (0) 2020.07.09