C to C++ 1. 입출력 방식에 대하여

최인규·2023년 6월 27일
0

C/C++

목록 보기
3/7
post-thumbnail

본격적으로 전에 학습했던 절차 지향 언어인 C언어에서 C++로 문법을 갈아타는 공부를 시작해보자.

1. 출력(printf 와 Cout)

우선, 코딩 공부를 처음 시작했을 때 했던 것처럼 "Hello World!" 를 출력해보자!!!

#C 스타일!!!
#include <stdio.h>

int main()
{
	printf("Hello world!");
	return 0;
}

바로 C++로 같은 결과를 출력해보자.

#include <iostream>

using namespace std;

int main()
{
	cout << "Hello World!";
	return 0;
}

보시다시피 큰 차이는 없다.

C언어에서는 printf와 scanf를 사용하기 위해서 stdio.h라는 헤더파일을 include했다면, C++에서는 cout과 cin을 사용하기 때문에 stdio.h 헤더파일 대신에 iostream을 include해주면 된다.

using namespace std;

위의 코드는 왜 쓰는가 하면 C++ 표준 라이브러리인 std네임스페이스의 멤버들을 사용할 때, 매번 std::접두사를 붙여야한다는 번거로움을 피하기 위해서인데, 이게 무슨 말인지 직관적으로 이해하기 위해서 위의 C++코드를 using namespace std; 없이 짜보고, 비교해보자!

#include <iostream>

int main()
{
	std::cout << "Hello World!";
	return 0;
}
  

이처럼 std::를 내가 무언가 출력하거나 입력받을 때, 아니 어떠한 함수를 사용하던 간에 붙여야 한다는 번거로움을 피하기 위해서 쓴다고 생각하면 된다.(사실 그냥 iostream 쓰면서 같이 습관처럼 작성하자)

2. 입력(scanf와 cin)

앞의 출력에서는 솔직히 큰 메리트를 못 느끼지만, cin은 나름 매력적인 장점을 가지고 있기에 잘 살펴보자.

우선, 앞에서 학습한 느낌 그대로 C로 코드를 짜보고 같은 결과를 C++로 짜보고 비교해보자!

#C스타일

#include <stdio.h>

int main()
{
	int a;
	double b;
	char k;

	printf("정수를 입력하세요: ");
	scanf("%d", &a);

	printf("실수를 입력하세요: ");
	scanf("%lf", &b);

	printf("문자를 입력하세요: ");
	scanf(" %c", &k);

	printf("%d %lf %c", a, b, k);
}

#C++ 스타일

#include <iostream>

using namespace std;

int main()
{
	int a;
	double b;
	char k;

	cout << "정수 입력";
	cin >> a;

	cout << "실수 입력";
	cin >> b;

	cout << "문자 입력";
	cin >> k;

	cout << a << b << k << endl;
	return 0;
}

가장 큰 장점은 바로 형식 지정자를 굳이 안 적어도 된다는 점이다.
(C에서 형식지정자 잘못 적어서 에러 뜬 적이 한 두 번이 아님을 감안하면 필자에겐 매우 큰 장점이라고 생각된다.)

또한 여기서 중요한 점은 cout과 cin의 화살표 방향이 다르다는 점이다. 이를 꼭 인지한 상태로 자주 사용하며 익숙해져야한다. 사실 직관적으로 이해하려면 사용자가 입력해야하는 cin의 경우에 >> 방향으로 작성하는데 우리가 gcc에 입력해왔던 경험을 떠올려보면 << 뒤에 쓰는 것보다는 합리적이라는 생각이 든다.

3. 이모저모

1) 개행문자에 대하여

printf("Hello World!\n");
cout << "Hello World!" << endl;

줄바꿈 문자를 C에서는 \n으로 지원하듯이, C++ 에서는 endl을 지원한다.
end line의 약자라고 생각하면 되는데 매우 중요한 사실은 endl이 \n에 비해서 시간이 꽤 걸린다는 것이다.

코딩테스트와 같이 코드의 작동 시간에 제한이 있는 경우를 위해서라도 endl보다는 \n을 적극적으로 사용하길 추천한다.

#BEST
cout << "Hello World!" << "\n";

2) cin,cout의 속도 높이기 (feat. 코딩테스트)

우선, 다음 reference를 읽어보고 오길 바란다.

https://se-jung-h.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98C-cin-cout-%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%86%8D%EB%8F%84-%EB%86%92%EC%9D%B4%EA%B8%B0

	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL

아직 연습하는 단계인 우리에게 시간 초과는 큰 문제는 아니긴 하지만, 실력이 올라 대부분의 문제들을 어느 정도 구현할 줄 아는 상태라면, 위와 같은 사실을 인지한 채로 코드 최적화까지 진행할 수 있으면 좋겠다.

0개의 댓글

관련 채용 정보