리메이크 중/C,C++ 이론 중심

C(&C++) 이론 6. 표준 입출력 방법

라이피 (Lypi) 2022. 12. 29. 20:50
반응형

 


내용 참고

C++ 기초플러스 4판 (성안당)

혼자 연구하는 C/C++ (Soen.kr/와우북스)

Microsoft Docs (구 MSDN)


C/C++에서 데이터를 출력해보자.

■  가장 기본적인 main함수 구조에 데이터 입출력을 위한 구조를 추가해보자.

■  추가되는 부분 중 중요한 부분은 include 문과 기본 입출력 함수 및 클래스이다.


Ⅰ. C언어의 Hello World

#include <stdio.h>

int main()
{
    printf("Hello World \n");
    return 0;
}​

ⅰ. #include <stdio.h>

■  include 명령어는 코드의 가장 상단에 위치하며 코드를 추가하는 역할을 한다.

  코드의 맨 윗줄에서 '#'으로 시작하는 명령어들을 '전처리기'라고 하며 가장 먼저 처리되는 코드이다.

■  include문은 소스파일을 추가하는 명령어로 이렇게 추가된 파일을 헤더 파일이라고 한다.

■  추가된 stdio.h 헤더파일은 표준 라이브러리 중 하나로 표준 입출력에 관련한 함수들을 포함한다.  

 

ⅱ.  printf("Hello world \n");

■  C언어 콘솔에서 가장 유명하고 많이 쓰는 콘솔 출력 함수는 printf() 함수이다.

■  printf() 함수는 문자열 포맷을 지정할 수 있는 문자열 출력 함수다.

■  이외에도 C언어의 콘솔 출력 함수로 문자열 출력 함수인 puts(), 문자 출력 함수인 putch() 등이 있다.

■  \n은 이스케이프 문자라고 하며 줄바꿈을 의미한다. 

■  C나 C++에서 명령문이 끝났음을 표현하기 위해서 ;(세미콜론)을 사용한다.

■  세미콜론을 사용하지 않으면 컴파일러는 뒷 문장과 이어지는 문장으로 인식한다.

Ⅱ. C++의 Hello World

#include <iostream>
using namespace std;

int main()
{
    cout << "Hello World C++" << endl;
    printf("Hello World \n");

    return 0;
}​

 

ⅰ. using namespace std;

■  C++에서는 클래스와 이름공간(namespace)라는 개념이 추가된다.

■  using 문은 사용하려는 namespace를 지정하거나, 문법을 단순화하거나, 템플릿과 관련하여 쓰인다.

■  가장 기본적인 사용법은 이름공간을 사용하겠다고 선언하는 것이다.

■  std 이름공간은 표준 라이브러리의 이름 공간으로 cout 클래스나 cin 클래스 등이 들어있다.

■  C++에서도 전처리문을 사용하여 헤더파일을 추가한다. 

■  iostream 헤더파일은 stdio.h 헤더파일의 함수들도 거의 포함한다.

 

ⅱ. cout << "Hello World" << endl;

■  C++에서는 함수도 사용하지만 함수보다는 클래스를 더 많이 사용한다.

■  cout은 클래스로 설계에 의해서 printf()와 같은 함수와는 다른 사용법을 갖는다.

■  cout은 출력하고 싶은 문자열을 << 기호를 이용하여 cout쪽으로 밀어넣으면 된다.

■  endl은 cout에서 줄바꿈을 의미한다. 

■  즉, \n 이스케이프 문자와 같은 의미지만 cout에서 \n 이스케이프 문자를 사용할 수 없는 것은 아니다.

■  위에서 말했다싶이 printf() 함수도 C++에서 사용할 수 있다.

 

Ⅲ. C언어의 입력 함수

#include <stdio.h>

int main()
{
    int a;
    scanf("%d", &a);
    printf("input : %d \n", a);

    return 0;
}

ⅰ. scanf ("%d", &a);

■  C언어의 표준 입출력 함수는 서식이 포함되기 때문에 생각보다 사용법이 복잡하다.

■  또한 이해하기 위해서 알아야하는 것도 많다. 하지만 지금은 그냥 사용법에 집중하자.

■  혹은 C++의 입출력 함수로 빠르게 넘어가는 것도 방법이다.

■  scanf()와 printf()에서 f가 포맷이 있다는 의미이다.

■  scanf() 함수는 먼저 포맷을 지정하는 문자열을 적고, 데이터를 받을 변수의 주소 (&변수명)를 적는다.

■  int a; 는 변수를 선언하는 명령이다.

■  &a의 &은 포인터와 관련된 연산자로 a의 주소를 반환한다.

■  일단 이렇게 쓰면 프로그램이 시작하자마자 입력을 기다리며 입력된 값을 정수형으로 저장한다.

■  이외에도 문자열을 입력받는 gets(), 문자를 입력받는 getch() 등이 있다.

 

Ⅳ. C++의 입력 함수

#include <iostream>
using namespace std;

int main()
{
    int a;
    cin >> a;
    cout << "input : " << a << endl;

    return 0;
}

ⅰ. cin >> a;

■  C++에서 사용자에게 입력을 받는 대표적인 방법은 cin 클래스를 사용하는 것이다.

■  확실히 C의 입출력 함수보다 C++의 입출력 클래스가 사용법이 쉬운편이다.

■  cin 클래스는 데이터를 저장할 변수 쪽으로 >> 기호를 사용하면 된다.

■  서식이나 데이터 타입 등은 cin 클래스가 알아서 처리해주므로 신경쓸게 적다.

ⅱ. cout << "input : " << a << endl;

■  cout 클래스에는 데이터 타입에 따라 넣어주면 된다.

■  "input : " 문자열 상수이고, a는 변수이므로 따로따로 넣어준다.

■  변수를 여럿 넣을때도 따로따로 넣어준다.

 


※ 이스케이프 문자표

※ 서식 문자표

■  printf() 함수와 scanf() 함수의 서식 문자에 들어가는 변수는 뒤에 입력한 변수가 순서대로 들어간다.

■  서식 문자는 기본적으로 '무엇을' 출력할지를 결정하지만 '어떻게' 출력할지도 정할 수 있다.

■  정수형 서식을 지정하는 %d 앞에 숫자가 들어가면 숫자의 자리수를 나타낼 수 있다.

■  실수형 서식을 지정하는 %f 앞에 숫자가 들어가면 숫자의 자리수와 소수점 몇자리까지 표현할 지 나타낼 수 있다.

■  아래 예시 코드를 첨부할테니 바꿔보면서 확인해보면 된다. 

■  %d와 %f를 제외한 서식 문자에 대한 것도 비슷하며 자세한 것은 레퍼런스를 참고하길 바란다.

#include <stdio.h>

int main()
{
    int a, b = 324;
    float f, g = 23.456;

    scanf("%d %f", &a, &f);
    printf(">%5d<, >%-5d<, >%05d<, >%-5d< \n", a, a, b, b);
    printf(">%3f<, >%.2f<, >%4.4f<, >%-10.2f< \n", f, f, g, g);

    return 0;
}

 

반응형