ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C++] 기초 정리(입출력) 및 실습 기록
    Programming Language/C++ 2022. 7. 23. 13:22

    이미 여러가지 프로그래밍 언어로 코드를 구현해봤지만, 매번 정리 없이 하는 것 같아서 기본적인 것이지만 기록을 해두려고 한다.

     

    1.  간단한 정수의 덧셈 결과 출력

    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdio.h>
     
    int main() 
    {
        printf("%d + %d = %d\n"235); 
    }

    // 출력: 2 + 3 = 5
     
     
     
    cs

     

    2. 서식 지정자

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include <stdio.h>
     
    int main()
    {
        // %d : 정수 출력
        printf("%d + %d = %d\n"235);
     
        // %f : 실수 출력
        printf("%f\n"3.14);
        printf("%.2f\n"3.14159);
     
        // %c : 1글자 출력
        printf("%c %c %c\n"'a''b''c');
     
        // %s : 문자열 출력
        printf("%s\n""안녕하세요");
    }
     
     
    cs

    1. %d: 정수 출력 시 사용

    - 정수(소수점 아래가 없는 수)

    - 만약 소수점 아래가 있는 수를 출력하면 에러가 나지는 않지만 이상한 값이 출력된다.

     

    2. %f: 실수 출력 시 사용

    - 기본적으로 %f는 소수점 6째 자리까지 반올림하여 출력, 만약 6째 자리까지 입력하지 않았을 경우 강제로 0이 뒤에 출력된다.

    - 만약 반올림할 자리를 직접 지정하고 싶을 경우 %.2f와 같이 자릿수를 점 뒤에 기입하면 된다.

     

    3. %c: 문자 한 글자를 출력할 때 사용

    - 숫자 및 영어 대소문자, 그리고 키보드로 입력할 수 있는 몇몇 기호들을 말한다.

    - 한글은 %c 로 출력 불가하다.

    - 문자를 표현하려면 작은 따옴표 안에 넣어야한다. ex) 'a'

     

    4. %s: 문자열을 출력할 때 사용

    - 문자열은 항상 큰따옴표 안에 넣어야한다. ex) "hello, world!"

     

    3. scanf를 사용한 입력

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <stdio.h>
     
    int main()
    {
       int a, b;
     
       scanf("%d%d"&a, &b);
       printf("%d + %d = %d\n", a, b, a + b);
    }
     
     
    cs

    - scanf 함수는 입력 형태에 따라 유연하게 대응함. 따라서 입력 형식이 많이 중요하지는 않다.

    - %d 두 개를 썼다면 두 정수가 엔터로 구분되어 있어도 되고, 공백으로 구분되어 있어도 되고, 공백 여러 개로 구분되어 있어도 된다.

    - 두 숫자를 아무 구분 없이 입력할 경우 한 정수로 인식한다.

     

    4. scanf의 서식 지정자

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
     
    int main()
    {
       int a;
       char b;
       float c;
       double d;
       scanf("%d"&a);
       scanf("%c"&b);
       scanf("%f"&c);
       scanf("%lf"&d); // double 입력받을 때 %lf 사용
    }
     
    cs

    - scanf가 작동하는 특유의 방식 때문에 double을 입력 받을 때는 %lf 라는 서식을 사용해야한다.

    - scanf 함수에는 보안 문제가 있는데, 그게 바로 '버퍼 오버플로'이다. 버퍼 오버플로란 예상보다 긴 입력이 들어왔을 때 입력받고자 하는 변수의 범위를 벗어나 엉뚱한 변수의 값이 바뀔 수 있는 현상인데, 이런 취약점을 이용해 해킹을 하기도 했다고 한다. 때문에 입력받을 최대 글자 수를 지정해서 그런 일이 발생하지 않도록 scanf_s 함수가 만들어졌다.

     

     

    자세한 설명은 아래 블로그를 참고하면 좋을 것 같아 링크를 걸어두었다.

     

    https://m.blog.naver.com/yun4794/221100314808

     

    [C/C++]scanf와 scanf_s 함수의 차이점. #버퍼 오버플로우, C4996 오류

    표준입력함수 scanf / scanf_s자바의 Scanner, 자바스크립트의 prompt C언어의 scanf 그리고 scanf_s 이...

    blog.naver.com

     

     

     

    댓글

Designed by Tistory.