온백의 코딩 블로그

온백의 비밀 기록방

Note/C language

입출력, printf()와 scanf() / int main이랑 return 0, <stdio.h>가 뭐야? (+ scanf 오류 해결법!) [

온백 hundred_100 2022. 12. 4. 00:02

안녕하세요, 볼트입니다.
정말... 오랜만에 글을 올려보네요 ㅎㅎ
카테고리 정리 약간 하고 글을 써봅니다.

전 글 들을 보면 '~다'도 끝나는데요,
그렇게 하는 게 더 불편해서 그냥 '~합니다'로 끝내려고 합니다.

전에 네이버 블로그를 쓸 때 C언어 강좌(?)를 쓰다가 말았었는데요,
그걸 다시 티스토리에 써보려고 합니다.

아직 저도 C를 잘 하는 편은 아니고, 모르는 것도 많기 때문에아마 순서대로 차례차례는 못 쓸 것 같습니다.

네이버에서 그렇게 하다 제가 햇갈려서 망해버렸기 때문에최대한 탑 쌓듯이 글을 올려볼 겁니다.

서론이 많이 길었습니다.

이 글을 쓰는 목적인 'C언어의 입출력'에 대해 다뤄볼 것이고,
처음에 마주치면 당황스러운 scanf() 관련 오류에 대해서도 다뤄볼 겁니다.

바로 시작해 보도록 하죠..!

일단 시작 전에.. 저와 같이 코딩 자습을 어디서 할까 고민이 하시는 분들이 계실 거 같아 글 남깁니다.
저는 요즘 '모두의 코드' 라는 사이트에서 자습을 하고 있습니다. C++ 자습 중이고, 글이 되게 잘 나와있기 때문에
이 사이트로 해보시는 것을 추천 드립니다!

코딩의 기초, 입출력


이번에 해볼 것은 위에서 말했듯이 입출력 입니다.

C언어에서는 입력과 출력을 위해 '어떤 것' 필요합니다.
그 중 출력을 먼저 알아봅시다.

printf()

출력을 하기 위해선 printf() 라는 것이 필요합니다.

출력은 말 그대로 '무언가를 보여주는 것' 으로
저희가 프로그래밍을 하기 위해 깐 컴파일러에 코딩을 하고 실행시키면
실행 화면 창에 저희가 보이라고 명령 내린 것을 보이도록 합니다.

출력 예시


위에 화면 처럼 출력을 해보도록 하죠!

printf()사용 방법은 이렇습니다.

printf(출력할 내용);

printf를 먼저 쓴 후,
괄호 안에 출력할 내용을 적으면 됩니다.

#include <stdio.h>

int main() {
	printf("Hello, World!");
    
	return 0;
}


이렇게 하면 출력이 됩니다!

문자나 문자열을 출력하고 싶다면 큰 따옴표로 감싸줘야 합니다. ('문자' 하나는 작은 따옴표)

그런데 갑자기 printf() 말고도 다른 여러 가지가 등장을 했군요..
진짜 처음 보시는 분들은 당황스러우실 겁니다.

지금은 #include <stdio.h> 는 printf() 같이 뒤에 괄호가 붙은 것은
'함수'라고 하는데, 프로그래밍을 위한 기본적인 함수들이 저장되어 있는
보관소 정도로 생각하시면 됩니다.

int main() {}도 '함수' 인데요,
아직까지는 프로그래밍을 하기 위해 꼭 필요한 함수가 main이고, int main()으로 이 함수를 만들고,
{}안에 실행되도록 코드를 넣는다고 생각하시면 됩니다.

혹시 아직 이해가 어려우신가요?
그러면 이 그림을 봅시다.

뭔가 많이 익숙한 박스 아닌가요? 초등학교 수학 시간에 많이 보셨죠?
'입력' 부분에 사과 4개 그려져 있고 이상한 박스를 지나면 3개가 추가되서 나온다는.. 그런..
그거랑 같습니다! 대신 사과 4개가 없어도 박스를 실행(?) 시키면 출력이 나온다 정도?

아까 printf()도 '함수'라고 말씀드렸습니다.
그 말은 함수는 main만 있는 것은 아니라는 건데요..!

여러 함수가 있으나 main이란 라는 함수 먼저 작동되며,
함수 안에서 함수를 호출할 수 있다! 이렇게 생각해 주세요!

그렇다면 printf()도 어딘가에 정의가 되어있다는 뜻인데요,
그 어딘가가 바로 stdio.h 랍니다!

이 정도 까지..!


scanf()

이번엔 입력을 위해 사용하는 함수를 알려드리겠습니다.
scanf() 인데요!

scanf("받을 형식", 받을 위치);

이렇게 씁니다!

#include <stdio.h>

int main() {
	int i = 0;
    
    scanf("%d", &i);
    
    return 0;	// 굳이 쓸 필요는 없음
}

근데 int i가 무엇일까요..?
i라는 이름의 '변수'를 선언한 겁니다!

변수는 말 그대로 '변할 수 있는 수' 입니다.
int형 (정수형) 의 변할 수 있는 수를 만들고, 받은 것 이죠.

int 말고 더 여러가지가 있는데요,

int(정수형), float(실수형), char(문자) 가 가장 대표적 입니다.

정수형은 말 그대로 정수만 저장이 가능합니다. 소수점 뒤에는 저장이 안됩니다.
소수점 뒤에를 저장하고 싶으면 실수형을 사용해야 합니다.

그런데 이 두 타입에는 문자 저장이 불가능 한데요,
문자를 저장하기 위해선 char를 사용해야 합니다.

대신 char은 문자 '하나'만 저장이 가능하기 때문에여러 개를 저장하고 싶다면

char (변수 이름)[(저장할 개수)];

이렇게 해주셔야 합니다.

예) char a[10] = {0};(뒤에 {0}은 각 칸 하나하나를 다 0으로 초기화 시키라는 뜻입니다.)

scanf() 앞을 보면 "%d"가 있는데요,

정수형일 땐 %d, 실수형일 땐 %f, 문자 하나는 %c로 적어야 합니다.

#include <stdio.h>

int main() {
	int i = 0;	// 정수형
    float j = 0;	// 실수형
    char a;		// 문자
    
    scanf("%d %f %c", &i, &j, &a);		// 여러 줄 입력하도록 가능
    
    printf("%d %f %c", i, j, a);
}

(scanf()를 사용하면 공백 입력이 안되기 때문에 공백을 입력 받으려면 다른 방법을 사용해야 합니다)

그런데.. &는 무엇일까요..?

변수들은 컴퓨터 안에 저장 공간을 할당을 받습니다.
변수의 이름 앞에 &를 붙이면
그것은 변수의 주소값, 그냥 저장 되어있는 위치를 표현한다고 보면 됩니다!


scanf를 썼더니 갑자기 오류가 뜨시는 분들이 있는데요..!

C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

그러니깐 이게 무슨 뜻이냐면..
간단하게 말해서 scanf()는 안전하지 않다하는 뜻입니다.

Visual Studio를 사용하시는 분들에게 나오는 오류인데요..!

어디서 위험하냐면.. 아까 변수가 저장 공간을 할당 받는다고 했습니다.
일정 저장 공간의 범위를 넘으면 다른 메모리에 침범이 될 수 있어 위험하다는 겁니다.

scanf_s를 쓰는 방법과 #define _CRT_SECURE_NO_WARNINGS를 쓰는 방법이 있는데요,

scanf_s는 VS 안에만 있는 거라 다른 곳에선 오류가 나기 때문에
#define _CRT (어쩌구 저쩌구).. 쓰시면 됩니다! (대신 맨 윗 줄에 해야합니다)



질문이나 잘못된 정보 등이 있으면 댓글 꼭 남겨주세요! 감사합니다 볼트였습니다!


2022.07.29 - [Note/알아두면 좋은 Git - GitHub 정보들] - 초보자들 신경 써주지 않는 깃허브.. README.md 꾸며보기!
2022.07.17 - [Diary/코딩 잡 지식] - 프로그래머들에게 추천하는 코딩 폰트, D2coding!
2022.07.21 - [Diary/코딩 갖고 놀기] - C언어로 카이사르 암호 해독기 만들기(2) 최종본

반응형