본문 바로가기
Language&Framework&Etc/C++

C언어 기반의 C++(01-1) printf와 scanf를 대신하는 입출력 방식

by 머리올리자 2020. 12. 19.

문자열 "Hello World"의 출력

 

예제

#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>

위의 명령이 정의되어 있지 않다면 Std, cout, endl... 등등의 함수를 사용하지 못함.

 

"C++의 헤더파일에는 확장자가 없음?"

 

헤더파일의 확장자는 C언어와 마찬가지로 .h

 

그러나 C++에서는 프로그래머가 정의하는 헤더파일의 선언이 아닌, 표준 헤더파일의 선언에서는 확장자를 생략하기로 약속

 

[참고]

 

과거에는 <iostream.h>와 같이 확장자를 표기하였음

 

그러나 새로운 C++ 표준의 도입으로 인해 C++ 표준 라이브러리에도 적지 않은 변화가 생김

 

그리고 다음 두 가지 이유로 새로운 표준 라이브러리의 사용을 목적으로 하는 헤더파일의 포함에는 확장자를 생략

 

  • 과거의 표준 라이브러리와 새로운 표준 라이브러리의 구분
  • 새로운 표준 라이브러리를 사용하는 형태로 소스코드를 쉽게 변경할 수 있도록

2. std::cout과 << 연산자를 이용한 출력

출력을 위해 다음의 형태

std::cout << "출력대상";
  • 출력대상의 위치에는 무엇이든 올 수 있다.
  • 정수와 실수를 비롯해서 문자열, 그리고 변수도 올 수 있다. (서식 지정자로 출력하는 C언어에 비해 훨씬 자유로움)

3. << 연산자를 이용한 출력

  • <<도 연산자다.
  • 연산자를 이용하면 둘 이상의 출력대상을 연이어서 출력 가능
std::cout << '출력 대상1' << '출력 대상2' << '출력대상3';
  • std::endl : <<연산자를 이용한 std::endl의 출력은 개행으로 이어진다.

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

두 개의 숫자를 입력 받고, 입력 받은 숫자의 덧셈 결과를 출력하는 예제

 

#include <iostream>

int main(void)
{
	int val1;
	std::cout << "첫 번째 숫자입력: ";
	std::cin >> val1; // 키보드로부터 정수를 하나 입력 받아서 변수 val1에 저장

	int val2;
	std::cout << "두 번째 숫자입력: ";
	std::cin >> val2;

	int result = val1 + val2;
	std::cout << "덧셈결과: " << result << std::endl;
	return 0;
}

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

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

데이터 입력을 위해 다음에 형식

std::cin>>'변수'

'변수'의 위치에는 키보드로부터 입력 받은 데이터를 저장할 변수의 이름이 오면 됨.

std::cin>>val1;

키보드로부터 정수를 하나 입력 받아서 변수 val1에 저장

 

정수형 덧셈 말고, 실수형 덧셈을 하고자할 때 자료형 정의 형태만 int에서 double로 바꿔주면 됨.

 

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

 

문자열로 입력과 출력을 한다고 가정

 

C언어

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

 

C++

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

2. C++의 지역변수 선언

C언어로 프로그램을 작성하는 경우에는 함수를 정의함에 있어서 지역변수의 선언이 항상 제일 먼저 등장해야만 했다.

그러나 C++의 지역변수 선언은 함수 내 어디서든 삽입이 가능하다.

 

참고로 C언어도 새로운 표준에서는 C++과 마찬가지로 변수선언의 위치에 제한을 두지 않는다.

 

그러나 대부분의 컴파일러는 이를 허용하지 않는다고 함

 

반면 C++의 모든 컴파일러는 지역변수의 선언 위치에 제한을 두지 않는다.

 

예제

#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';

위 구조로 연속적인 데이터의 입력을 요구할 수 있다는 사실

 

첫 번째 입력되는 정수 : '변수 1'

두 번째 입력되는 정수 : '변수 2'

 

첫 번째 정수와 두 번째 정수의 경계는 탭, 스페이스 바, Enter 키의 입력과 같은 공백에 의해 나눠진다.

 

for문의 초기화 문장 내에서 변수 선언이 가능함

int num;
for(num=0; num<10; num++){...}

위 코드는 아래와 같이 한 줄로 선언이 가능하다

for(int num=0; num<10; num++){...}

배열 기반의 문자열 입출력

#include <iostream>

int main(void) {

	char name[100];
	char lang[200];

	std::cout << "이름은 무엇입니까? ";
	std::cin >> name; // 문자열 저장

	std::cout << "좋아하는 프로그래밍 언어는 무엇인가요? ";
	std::cin >> lang; // 문자열 저장

	std::cout << "내 이름은 " << name << "입니다.\n"; // std::endl 개행의 역할과 같음
	std::cout << "내가 좋아하는 언어는 " << lang << "입니다." << std::endl;

	return 0;
}

 

 

 

참고 : [윤성우 열혈 C++ 프로그래밍] - 대부분의 내용 및 코드는 이 책에서 개인 공부 정리 목적으로 참고하였습니다.