[C++] printf/scanf 를 대신하는 입출력 방식

서희찬·2021년 4월 26일
post-thumbnail

c++도 c언어와 마찬가지로 헬로월드 부터 시작해보자!!!

문자열 "Hello World" 의 출력

//
//  main.cpp
//  1_practice
//
//  Created by 서희찬 on 2021/04/26.
//

#include <iostream>

int main(void)
{
    int num=20;
    std::cout<<"Hello World!"<<std::endl;
    std::cout<<"Hello "<<"World!"<<std::endl;
    std::cout<<num<<' '<<'A';
    std::cout<<" "<<3.14<<std::endl;
    return 0;
}

위의 코드와 출력물을 대상으로 관찰하면 이와 같은 사실을 알 수 있다.

  • 헤더파일 선언문 #include < iostream >
  • std::cout ,<< 을 이용한 출력
  • std::endl 을 이용한 개행

관찰결과 1 : 헤더파일 선언문 #include < iostream >

c언어에서 printf/scanf를 위해 <stdio.h>를 포함했다면 C++ 에서는 다른

include < iostream >

이 헤더파일을 추가해야한다.

그런데.. 위의 헤더파일 선언문을 보면 이와같은 생각이 든다.

"c++의 헤더파일에는 확장자가 없나요..?"

아니다!!!!!
헤더파일은 씨와 마찬가지로 .h이다.
다만 씨플플에서는 표준 헤더파일의 선언에서는 확장자를 생략하기로 약속되어 있다.
(iostram.h 는 과거의 표준 라이브러리에서 쓰인다.)

관찰결과 2 : std::cout, << 연산자를 이용한 출력

출력을 위해서는 다음의 형태를 취해야 한다.

std :: cout << '출력대상';

출력 대상 위치에는 무엇이든~ 올 수 있다.
정수,실수,문자열 변수~ 등등 말이다!

그리고 C와 달리 %d,%s와 같은 서식문자를 이용해서 별도의 출력 포맷을 지정하지 않아도 데이터의 성격에 따라 적절한 출력이 이뤄진다 !!

하지만!!
왜 어째서 이렇게 되는지는 추후에 배워보자 !

관찰결과 3 : << 연산자를 이용한 출력대상의 연이은 표현과 개행

<<도 사실 연산자이다!
이를 이용해서 둘 이상의 출력대상을 연이어서 출력할 수 있다.

std::cout<<"출력대상1"<<"출력대상2"<"출력대상3";

그리고 std::endl이 의미 하는 바는

<< 연산자를 이용한 std::endl의 출력은 개행으로 이어진다.

이렇게 우리는 하나의 예제를 통해
std::cout,<<,std::endl의 사용법을 알았지만 정체를 모른다!
하지만 이는 추후에 서서히 밝혀질것이다!!!

scanf를 대신하는 데이터의 입력

다음 예제를 보자

//
//  main.cpp
//  1_practice
//
//  Created by 서희찬 on 2021/04/26.
//

#include <iostream>

int main(void)
{
    int val1;
    std::cout<<"첫 번째 숫자입력 : ";
    std::cin>> val1;
    
    int val2;
    std::cout<<"두 번째 숫자입력 :";
    std::cin>> val2;
    
    int result = val1 + val2;
    std::cout<<"덧셈 결과 :"<<result<<std::endl;
    
    
    return 0;
}

위 예제를 통해서 알 수 있는 특성은 다음과 같다.

  • 키보드로부터 데이터의 입력에도 헤더파일 선언문 #include 이 필요하다
  • 키보드로부터 데이터 입력에는 std::cin, >> 연산자가 사용된다.
  • 변수의 선언은 어디~서~든~ 가능하다!

헤더파일은 생략하고 나머지를
구체적으로 확인하자 !

관찰결과 1 : 데이터의 입력에 사용되는 std::cin, >> 연산자

예제에서 보이듯 데이터의 입력을 위해서는

std::cin >>"변수";

형태를 취한다.
이는 키보드로부터 정수를 하나 입력받아 "변수"에 저장 하라는 의미이다.

그렇다면 실수형을 더할때는 어떻게 하면될까?
int -> double로 자료형을 바꿔주기만 하면된다.

"c++ 에서는 데이터의 입력도 데이터의 출력과 마찬가지로 별도의 포맷 지정이 필요 없기 때문이다!"

즉! int 형 변수가 오면 int형 데이터의 입력이!
double형 이 오면 double형 데이터 입력이!!!

한번 예제를 수정 해서 소수를 입력해보자 !

소수로 잘 출력된다!!

이러한 방법은 문자열 이라고 해서 달라지지 않는다!
c언어에서는

char str[100];
scanf("%s, str);

이러한 방식이지만
C++에서는

char str[100];
  std::cin>>std;

이다 !!!

관찰결과 2 : c++ 지역변수 선언

c++는 c와 다르게 모든 컴파일러는 지역변수의 선언 위치에 제한을 두지 않는다.

한번 다음 예제를 보자!
두 개의 정수를 입력 받고 그 사이에 존재하는 정수들의 합을 계산해주는 문제이다.

//
//  main.cpp
//  1_practice
//
//  Created by 서희찬 on 2021/04/26.
//

#include <iostream>

int main(void)
{
  int val1, val2;
  int result = 0 ;
  std::cout<<"두 개의 숫자 입력: ";
  std::cin>>val1>>val2;
  
  if(val1<val2)
  {
      for(int i=val1+1;i<val2;i++)
          result+=i;
  }
  else
  {
      for(int i=val2+1;i<val1;i++)
          result+=i;
      
  }
  
  std::cout<<"두 수 사이의 정수 합 : :"<<result<<std::endl;

  return 0;
}

성공적으로 출력이 된다 .

이를 통해서 std::cin>>'변수1'>>"변수2";
로 연속적인 데이터의 입력을 요구 할 수 있음을 알수있다.
그리고 for문 안에서 변수 선언이 가능하다는 것 또한 알 수 있다.

배열 기반의 문자열 입출력

마지막으로 배열 기반의 문자 입출력에 대해 알아보자 !!

//
//  main.cpp
//  1_practice
//
//  Created by 서희찬 on 2021/04/26.
//

#include <iostream>


int main(void)
{
  char name[100];
  char lang[100];
  
  std::cout<<"이름은 무엇입니까?" ;
  std::cin>>name;
  
  std::cout<<"좋아하는 프로그래밍 언어는 무엇인가용 ? ";
  std::cin>>lang;
  
  std::cout<<"내 이름은 "<<name<<"입니다 \n";
  std::cout<<"제일 좋아하는 언어는 "<<lang<<"입니다."<<std::endl;
  
  return 0;
}

이를 통해 기본 입출력에 대해 배우는 시간을 가졌다 !!

profile
Carnegie Mellon University Robotics Institute | Research Associate | Developing For Our Lives, 세상에 기여하는 삶을 살고자 개발하고 있습니다

0개의 댓글