C언어 입출력은 C++에서도 컴파일이 가능합니다. C++ 스타일의 입출력은 어떻게 구성이 되어 있는 지 살펴보도록 하겠습니다.
C와 C++ 입출력 차이점
C++ 출력에 대해 아래와 같은 예시로 시작하겠습니다.
우선 std::cout<<"출력 대상"
으로 표현 가능합니다.
#include <iostream>
int main(void)
{
int num=10;
std::cout<<"Hello World"<<std::endl;
std::cout<<num<<std::endl;
return 0;
}
위와 같이 Hello World와 10이 출력되었습니다.
기존 C와 차이점은 아래와 같습니다.
- 입출력 서식을 정해 주지 않아도 된다. (e.g. %s, %c, %d 등 서식 지정 필요 없음)
- iostream
을 include할 때 .h를 붙이지 않아도 된다. 표준 헤더파일 선언은 .h를 붙일 필요 없다.
- std::cout
과 std::endl
로, 그리고 << 연산자를 통해 표현한다. std::cout
은 출력 시작 형태, <<는 출력 대상이 시작되는 연산자, 그리고 std::endl
는 개행이 온다.
응용하면 아래와 같은 예시가 있을 수 있습니다.
#include <iostream>
int main(void)
{
std::cout<<"Hello World";
std::cout<<"Hello World"<<std::endl;
return 0;
}
첫 번째 "Hello World" 마지막에 std::endl
를 붙이지 않아 개행이 되지 않았고, 다음 "Hello World"가 그대로 이어져 출력되었습니다.
입력은 다음과 같습니다.
std::cin>>'변수'
형태로 가능합니다. 아래 예시로 쉽게 이해할 수 있습니다.
#include <iostream>
int main(void)
{
int num1;
std::cout<<"숫자 입력:";
std::cin>>num1;
std::cout<<"숫자 출력:";
std::cout<<num1;
return 0;
}
입력을 30으로 하였을 때 정상적으로 30이 출력되는 것을 알 수 있습니다. 입력과 출력이 별도 서식이 필요 없기 때문에 미리 선언된 변수에만 입력 해 주면 됩니다.
변수 여러개에 입력이 필요한 경우 std::cin>>변수1>>변수2
형태로 입력을 요구할 수 있습니다.
문자열 입력
문자열도 크게 다르지 않고, char str[100]
등으로 선언하는 경우 따로 별도 서식 지정 없이 입력하면 됩니다.
다만 한 가지 주의할 점은...아래와 같은 예시를 볼 수 있습니다.
#include <iostream>
int main(void)
{
char str[100];
char str2[100];
std::cin>>str>>str2;
std::cout<<"출력: "<<str<<str2;
return 0;
}
입력을 str과 str2로 두 가지 받는 경우입니다. 첫 번째 입력으로 Hello와 My PC로 넣으면 아래와 같은 결과가 나옵니다.
마지막 출력을 보면 HelloMy로 되어 있습니다. 'My PC'에서 뒤에 PC는 빠졌는 데, 이유는 스페이스, 즉 공백이 있기 때문입니다. 공백을 판단해서 나눕니다.
하지만, 하나의 행을 공백 상관 없이 모두 받고 싶다면, getline 함수를 이용하여 입력 받아야 합니다.
cin.getline, getline 함수를 이용할 수 있는 데, 각각 쓰임이 다릅니다.
cin.getline: char* 자료형 또는 char 배열을 받을 때 사용
getline: string 자료형을 받을 때 사용
cin.getline을 보겠습니다.
#include <iostream>
using namespace std;
int main(void)
{
char str[100];
char str2[100];
cin.getline(str,100);
cin.getline(str2,100);
std::cout<<"출력: "<<str<<str2;
return 0;
}
이렇게 하면 띄어쓰기 포함하여 문자를 전달받을 수 있습니다.
'C C++ > C언어 기초' 카테고리의 다른 글
[C++] 함수 매개변수의 디폴트 값 (0) | 2022.07.07 |
---|---|
[C++] 함수의 오버로딩 (0) | 2022.07.07 |
C언어 - 구조체 배열과 포인터 (0) | 2022.05.05 |
C언어 - 구조체란? (구조체 정의, 구조체 변수의 초기화) (0) | 2022.05.05 |
C언어 - 함수 포인터 및 void 포인터 (0) | 2022.05.04 |
댓글