개발공부/C언어&C++

[C언어 강좌] 제 5강 출력과 입력( printf, scanf, scanf_s, _CRT_SECURE_NO_WARNINGS )

정보를드립니다 2020. 2. 23. 20:00
반응형

안녕하세요.

오늘은 변수에 데이터를 입력과 출력에 대해 알아보도록 하겠습니다.

 

출력

데이터를 출력하기 위해서는 "printf"라는 함수를 사용합니다.

형식

printf("서식", 데이터);

서식은 다음과 같이 넣을 수 있습니다.

서식 데이터 타입 비고
%d int 부호 있는 10진수 정수
%u unsigned int 부호 없는 10진수 정수
%o int 8진수
%x int 16진수 정수 소문자
%X int 16진수 정수 대문자
%f float 실수
%lf double 실수
%e float, double 부동소수점 e(소문자) 방식 실수
%E float, double 부동소수점 E(대문자) 방식 실수
%c char 문자
%s,%S char*, char[] 문자열
%p void* 포인트형

데이터에는 변수 혹은 상수를 넣어서 출력을 합니다.

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
void main()
{
    int nNum = -10;
    float fNum = 12345.6789123f;
    double dbNum = 89789.123456f;
    char ch = 'H';
    char chString[20= "Hello World";
 
    printf("%%d %d\n", nNum);
    printf("%%u %u\n", nNum);
    printf("%%o %o\n", nNum);
    printf("%%x %x\n", nNum);
    printf("%%X %X\n", nNum);
    printf("%%f %f\n", fNum);
    printf("%%lf %lf\n", dbNum);
    printf("%%e %e\n", dbNum);
    printf("%%E %E\n", dbNum);
    printf("%%c %c\n", ch);
    printf("%%s %s\n", chString);
 
}
 
cs

 

 

입력

데이터를 입력받기 위해서는 "scanf"라는 함수를 사용합니다.

※ Visual Studio 사용시 
error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
이런 에러가 발생한다면 다음과 같이 하면 됩니다.

1. scanf대신 scanf_s를 사용합니다.

2. "#define _CRT_SECURE_NO_WARNINGS" 추가합니다.

 

형식

scanf("서식", &변수(변수주소));

서식은 다음과 같이 넣을 수 있습니다.

서식 데이터 타입 비고
%d int 부호 있는 10진수 정수
%u unsigned int 부호 없는 10진수 정수
%o int 8진수
%x int 16진수 정수 소문자
%f float 실수
%lf double 실수
%e float 부동소수점 e방식 실수
%c char 문자
%s,%S char*, char[] 문자열

변수는 scanf 함수는 서식에 맞춰서 변수주소로 접근해서 데이터를 입력을 합니다.

그로인해 변수앞에 변수의 주소값을 지칭하는 "&"를 추가합니다.

 

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
void main()
{
    int nNum1, nNum2, nNum3, nNum4;
    float fNum1, fNum2;
    double dbNum;
    char ch = 'H';
    char chString[20= "Hello World";
 
    
    printf("%%d : ");
    scanf("%d"&nNum1);
    while (getchar() != '\n');
 
    printf("%%u : ");
    scanf("%u"&nNum2);
    while (getchar() != '\n');
 
    printf("%%o : ");
    scanf("%o"&nNum3);
    while (getchar() != '\n');
 
    printf("%%x : ");
    scanf("%x"&nNum4);
    while (getchar() != '\n');
 
    printf("%%f : ");
    scanf("%f"&fNum1);
    while (getchar() != '\n');
 
    printf("%%lf : ");
    scanf("%lf"&dbNum);
    while (getchar() != '\n');
 
    printf("%%e : ");
    scanf("%e"&fNum2);
    while (getchar() != '\n');
 
    printf("%%c : ");
    scanf("%c"&ch);
    while (getchar() != '\n');
 
    printf("%%s : ");
    scanf("%s", chString); // 문자열은 chString 변수 자체가 주소이기 때문에 &를 제외합니다.
 
    printf("%%d %d\n", nNum1);
    printf("%%u %u\n", nNum2);
    printf("%%o %o\n", nNum3);
    printf("%%x %x\n", nNum4);
    printf("%%f %f\n", fNum1);
    printf("%%lf %lf\n", dbNum);
    printf("%%e %e\n", fNum2);
    printf("%%c %c\n", ch);
    printf("%%s %s\n", chString);
}
 
cs

 

※ "while (getchar() != '\n');" 코드 추가가 되는 이유

다음과 같이 입력후 엔터를 눌렀을 때 개행문자(\n)가 입력될 수 있기 때문에 추가합니다.

 

반응형