본문 바로가기

C

([C언어] 4강) scanf함수와 printf함수로 변수 출력 (scanf 오류해결)

자 이번 시간에는 scanf함수를 사용하려고 합니다.

printf함수는 특정 값을 화면에 "출력" 해주는 함수였습니다

scanf함수는 사용자가 "입력"하는 값을 받아주는 함수입니다.

사용법을 알아볼까요?

그 전에 printf함수로 변수를 출력하는 방법을 알려드릴게요!

printf함수에는 매개변수로 문자열을 넘겨줍니다

printf("이부분이 문자열이에요~"); 이런식으로요!

그 문자열에 변수를 출력 하고 싶다고 칩시다

#include <stdio.h>

int main()
{
int number = 3;
printf("number");
}

이렇게하면 과연 3이 출력이 될까요?

아쉽게도 아닌것같네요.. number라는 문자가 그대로 찍혀버립니다.. 그러면 어떻게 해야할까요?

printf함수와 scanf함수에는 "포맷"이라는것이 존재합니다.

포맷이란 내가 지금 출력하려는건 문자가 아니라 변수야! 참고해! 라고 알려주는거라고 보면 되는데요

포맷에서 알아야할것은 %d, %f, %lf, %ld, %lld, %llf, %c, %s, %x, %o 등등이 있습니다

설명해드릴게요

포맷 타입 자료형 사용상황
%d 정수형 int int형의 정수를 출력하고 싶을때
%f 실수형 float float형의 실수를 출력하고 싶을때
%ld 정수형 long long형의 정수를 출력하고 싶을때
%lf 실수형 double double형의 실수를 출력하고 싶을때
%lld 정수형 long long long long형의 정수를 출력하고 싶을때
%llf 실수형 long double long double형의 실수를 출력하고 싶을때
%c 문자형 char char형의 문자를 출력하고 싶을때
%s 문자열형 char * 문자열을 출력하고 싶을때
%x 정수형 정수형 자료형 정수를 16진수로 출력하고 싶을때
%o 정수형 정수형 자료형 정수를 8진수로 출력하고 싶을때
%e 실수 지수형 실수형 자료형 실수를 지수표기법으로 표기하고 싶을때

 

자 그럼 이런 코드는 어떻게 될까요?

#include <stdio.h>

int main()
{
int number = 3;
printf("%d");
}

에러가 나겠죠! printf함수에 %d는 들어가있지만 뭘 출력하려고 하는지 어떻게알아!

그래서 자신이 출력하려는 값을 넣어주어야 합니다

#include <stdio.h>

int main()
{
int number = 3;
printf("%d",number);
}

이런식으로 말이죠!

한번 실행해 볼까요?

정상작동 되네요 ㅎㅎ

그러면 이번엔 number의 값을 두번 출력해보겠습니다

#include <stdio.h>

int main()
{
	int number = 3;
	printf("%d %d", number);
}

이렇게 하면 될까요? 아니요.. %d를 두번 썼으면 한번 쓸때마다 무슨값을 출력하려는건지 알려줘야해요

 

#include <stdio.h>

int main()
{
	int number = 3;
	printf("%d %d", number, number);
}

이런식으로 말이죠 따옴표 바깥에서 number를 출력하라고 알려줘야하는점 잊지마세요!

 

 

 

자 이제 scanf함수를 알아보겠습니다!

scanf함수를 쓰는법은 간단합니다

scanf(포맷,&입력값을 담을 변수...);

이렇게 해주면 되는데요

 

예제를 한번 보여드릴게요

#include <stdio.h>

int main()
{
int number;
scanf("%d", &number);
}

이렇게 하시면 됩니다만, & 넣는거 잊지마세요 &을 넣는 이유는 나중에 언젠가 배우게 될것이니

지금은 그냥 &을 넣어야된다 정도만 외워두시길 바랍니다.

저렇게하면 사용자에게 받은 입력이 number 변수에 할당되게 됩니다.

자 그럼 저렇게 실행을 해볼까요?

엥? 잘된다면서 왜 안되죠ㅡㅡ..

이유는 scanf함수는 기능상 불안정 문제로

마이크로소프트사에서 비활성화 시킨 기능입니다.

scanf_s라는 기능을 사용하라고 권장하고있죠

그래도 우리는 scanf를 사용할겁니다.

그럼 이 에러를 어떻게 안뜨게하느냐!

#include <stdio.h>줄 위에

#pragma warning(disable:4996)

이라는 코드를 넣어주세요

4996에러 즉, scanf에러를 무시하고 실행한다. 라는 뜻입니다

좋은방법은 아니지만 앞으로 이렇게 사용할게요~

#pragma warning(disable:4996)
#include <stdio.h>

int main()
{
	int number;
	scanf("%d", &number);
}

이대로 실행해 보겠습니다!

이렇게 빈 공간이 나오고 제가 숫자를 친 후 엔터를 쳐볼게요

자 이렇게 입력을 받는 모습을 볼 수 있습니다.

하지만 정확히 number변수에 값이 들어갔는지는 모르겠네요..

그럼 확인을 해볼까요?

 

#pragma warning(disable:4996)
#include <stdio.h>

int main()
{
	int number;
	scanf("%d", &number);
	printf("입력하신 정수는 %d입니다", number);
}

이 코드 이해 하셨나요?

자 그럼 실행을 하고 12345 엔터를 쳐보겠습니다

잘 되네요~

 

자 그럼 이제는 굳이 중요하진 않지만 상당히 많이 쓰는 것들을 알아볼게요!

 

printf에서 %는 포맷을 의미합니다

그럼 printf함수로 100%라는 문구를 출력하고싶은데

printf("100%");

이렇게하면 에러가 나요!

말씀드렸다 싶이 %는 포맷을 의미합니다 %를 화면에 출력하고싶을때는 %한번이 아닌

%%라고 해주셔야합니다

printf("100%%");

이렇게 말이죠!

또! 따옴표를 화면에 출력하고싶어요! 어떻게 해야하나요!

printf(""안녕하세요"");

이렇게 해도 문자열 두개 사이에 안녕하세요 라는 글자가 끼어있는 의미가 돼서 오류가 날텐데요..

여러분의 엔터키 위에는 \가 있을겁니다. 이를 누르면 /이 문자의 거꾸로된 모양 "역슬래쉬"

라고 부르는데요 역슬래쉬를 이용해 \" 이런식으로 하면 따옴표를 출력할 수 있습니다

printf("\"안녕하세요\"");

이렇게 말이죠!

그리고 제가 한줄로

"안녕하세요 잭클입니다"라는 문자가 아닌

"안녕하세요

잭클입니다"

라고 두줄로 입력하고 싶어요!

그럼 "개행문자" 라고 불리는 \n 문자를 넣어 개행을 할 수 있습니다

printf("안녕하세요\n잭클입니다");

이렇게요!

 

 

scanf도 사람마다 발음하는게 다르고 공식적인 발음은 잘 모르겠으나

저같은경우에는 스캔에프라고 합니당

 

 

자 그럼 오늘 내용도 중요하니 충분히 공부하시고 암기하시길 바라겠습니다!