본문 바로가기

컴퓨터/C언어 쉽게 배워보자

C언어 강좌 8. scanf, printf 값을 입력하고 출력해보자!

안녕하세요 sdk입니다


오늘은 printf 함수에 대하여 조금더 상세한 이야기와 scanf 함수 대하여 이야기 해보고자 합니다.


printf 함수 기억하시나요?

Input/Output 중 Output 즉 출력을 담당해 주는 함수입니다.


printf("HelloWorld!\n");

이 코드를 통하여, 우리는 HelloWorld! 를 볼수 있었습니다!

조금더 나아가 우리가 숫자나 혹은 어떠한 데이터를 같이 출력하고 싶을때 어떻게 하면 좋을까요?

자, 저는 지금 아래의 문장을 출력하고 싶습니다.

 1은 0보다 크다.

물론, 이 내용은 고정되어 있으니까, 그냥 

printf("1은 0보다 크다.\n"); 하고 출력 할 수 있습니다.

당연하게도 실행하면 성공적으로 "1은 0보다 크다" 가 출력됩니다.


하지만 만약 저 두 숫자가 변할수도 있는 숫자라면 어떨까요? ( 변수라면 어떨까요! )

이를 위해서 printf 함수는 " 서식문자 " 라는 개념과 함깨 변수의 값같은 데이터를 같이 출력해 줄수 있는 방법을 가지고 있습니다.

위의 문장 printf 함수를 조금 바꿔보도록 하겠습니다.

printf("%d은 %d보다 크다.\n", 1 , 0);

신기하게도 출력의 결과물은 동일합니다. "1은 0보다 크다"

어떤점이 다를까요?

위의 문장을 잘 봅시다.

발견 하셧나요?

%d 의 자리에 뒤에 등장하는 1 과 0 이 순서대로 들어가 있는 것을 확인하실 수 있습니다.

printf 함수는 이런식으로 특정한 부분을 변수의 값으로 대신해 출력하는 출력 방식을 지원하며, 

이때 사용되는 %d를 식문자 라고 합니다. (이번 포스팅에선 %d만 사용할 것입니다 %d: 부호있는 10진수 정수형)

따라서, 이제 우리는 변수의 값을 화면에 출력 할 수 있게 된거죠.


자 두번째로 소개할 

scanf 함수는 printf 함수와는 반대로 입력을 담당하는 함수라고 할수 있습니다. 

드디어 Input/Output 중 Input 를 배우게 되는것 입니다!


scanf함수는 다음과 같은 구조를 가집니다.

scanf("서식 문자",&변수);


일단, 이것만 알고 진행해 보자구요

int num = 0;

scanf("%d",&num);

위 함수의 동작은 

정수 값 하나를 입력받아서 num 에 저장해! 입니다.

왜 변수 앞에 & 연산자가 붙느냐구요? 

이것에 대하여는 나중에  " 포인터 " 라는것을 공부하면서 다시 보도록 합시다. 우선은 붙여야 된다고 생각하고 계시면 되겠습니다.

자 조금더 다양하게 바라봅시다.

scanf("%d %d",&num &num2);

처음 입력받은 값을 num에 저장하고 두번째로 입력받는 값을 num2에 저장해! 입니다.

scanf("%d",&num); 를 두번 호출한것과 동일하다고 할 수 있습니다.

값의 입력은 값하나 입력하고 엔터

엔터로 값을 구분하는 방법이 있고

여러가지 값을 공백( 스페이스바 ) 으로 구분해 입력하는 방법이 있습니다.

이게 어떤 소리냐 하면은 

1과 2를 입력하려고 할때 

1을 넣고 엔터 2를 넣고 엔터  하는것과 1  2 하고 엔터 하는것과 동일하다는 이야깁니다!


이제 저는

값을 두번 입력 받고 사칙 연산을 진행해 출력하는 예제를 만들어 보도록 할것 입니다.


일반적인 scanf 함수를 사용할때 비주얼 스튜디오가 _CRT 어쩌고 오류를 내뿜을 것 입니다. 이는 scanf함수의 취약점을 개선한 scanf_s 함수를 사용하라는 이야기며 특정한 서식문자 , 자료형 에서 " 메모리 크기를 전달해야 합니다"

위의 박스의 내용을 쉽게 말하자면 scanf 쓰지말고 scanf_s 를 사용하는것을 권장하며 우리가 이번포스팅에서 배울 내용에서는 

그냥 scanf 함수와 scanf_s 함수의 사용방법 차이가 없다는 이야깁니다!

( 나중에 문자열과 같은걸 다룰때 조금 달라지는데 그때 한번 다시 언급하도록 하겠습니다)


혹시 스스로 만들어 보신분 있으신가요?


있으시다면 정말 대단하십니다!



저는 두가지 값을 입력받아 사칙연산의 결과를 보여주는 프로그램을 하나 만들었습니다 ( 여러분들은 더 멋진걸 만들수 도 있죠!)

#include <stdio.h> int main() { //1.변수 선언 int num = 0; int num2 = 0; //2.입력 printf("값 1 입력 : "); scanf_s("%d", &num);  printf("값 2 입력 : "); scanf_s("%d", &num2);       //3출력 printf("%d + %d = %d \n", num, num2 , num + num2);     printf("%d - %d = %d \n", num, num2 , num - num2);     printf("%d * %d = %d \n", num, num2 , num * num2); printf("%d / %d = %d ... %d \n", num, num2 , num / num2 , num % num2); }

컨트롤 F5를 누르면 실행이 됩니다.

( 정수 값을 입력하고 엔터를 누르면 진행이 됩니다. )


저는 간단하게 이렇게 만들었습니다.

겁먹지 말자구요.


이 프로그램은 다음과 같은 구조를 가집니다.

1번  변수 선언 

   사용자한테서 값을 입력 받으면 저장할 저장공간이 필요합니다. 이때 사용되는것이 변수입니다.

2번    입력   

   이번 포스팅에서 배운 scanf 함수입니다. 사용자로부터 값을 입력받습니다. 값을 입력하고 엔터를 누를때 까지 대기하는 역할도 합니다. 

3번    출력  

   이번 포스팅에서 알아본 printf 함수입니다. %d 의 자리를 뒤에 전달한 변수의 값으로 바꿔서 값을 출력해줍니다.


 


이상으로 포스팅 마치겠습니다.

( 포스팅 간격이 조금 불규칙 적으로 변할것 같습니다. 죄송합니다. )




여러분들의 댓글은 큰 힘이됩니다 :)