포털:컴퓨터공학/C++/C언어에서 C++로 넘어가기

위키배움터

이 문서는 대문/포털:컴퓨터공학/C++의 하위문서입니다. 문서를 수정하기 전에 토론:대문/포털:컴퓨터공학/C++을 참고해 주시기 바랍니다.

C에서 C++로 넘어가기[편집]

cout[편집]

우리는 C언어에서 다음과 같이 코딩했었습니다.

0. C소스
#include <stdio.h>
int main(void)
{
 printf("Hello world!");

 return 0;
}
Hello world!

C++에서는 printf보다 더 쉬운 문자열 출력 함수를 지원해줍니다. 그것은 cout입니다. C에서 printf()를 사용하기 위해 <stdio.h>를 include했던 것 처럼, C++에서 cout을 사용하기 위해서는 <iostream>이라는 헤더파일을 include해야 합니다.

 주의하세요! 
  C++의 헤더파일은 더 이상 파일 뒤에 .h를 붙이지 않습니다!  

또한 우리는 더 이상 문자열을 함수의 괄호 안에, cout("이런식으로") 넣을 필요가 없습니다. C++는 프로그래머에게 완전히 새로운 방식을 선보입니다. 다음 소스를 보면서 C++이 C보다 얼마나 더 편해졌는지 살펴보세요.

1. cout
#include <iostream>
using namespace std;
int main(void)
{

 cout<<"Hello world!";

 return 0;

}
Hello world!

새로운 패러다임이군요! 왼쪽으로 향하는 꺽쇠 기호 2번이 cout이라는 함수를 사용하는 방법입니다.

 T I P 
  using namespace std;는 무엇인가요?
   std라는 이름 공간을 소스에서 사용한다는 것입니다. 클래스에 대해서 배우면 자세히 알게 될 것입니다. 지금은 습관처럼 include 후 넣어주세요.
 예제 1번 
  자신의 이름을 출력하는 프로그램을 코딩하고 실행해보세요.

cout함수에서도, 우리가 printf()를 쓸 때 사용했던 특수문자(escape sequence)를 사용할 수 있습니다.

2. cout-특수문자
#include <iostream>

using namespace std;

int main(void)
{

 cout<<"Hello\nworld!";

 return 0;
}
Hello

world!

cin[편집]

printf()를 대신해서 cout이 있다면, scanf()를 대신해서는 cin이 있습니다. cout과 마찬가지로 cin("이런식")으로 사용하지 않습니다.

3. cin
#include <iostream>

using namespace std;

int main(void)
{

 int input;
 cin>>input;
 cout<<"input value is"<<input;

 return 0;

}
10

input value is 10

위와 같이 코딩하고 실행하면 프로그램은, 프로그램에 사용자가 어떤 값을 넣고 엔터를 칠 때까지 기다릴 것입니다. C언어에서 scanf()를 사용해 본적이 있는 사람이라면 무슨 뜻인지 이해하실 수 있으실 것입니다. 3번 소스에서는 10을 입력하였습니다. 이 소스를 통해 cin이 scanf()의 역할을 한다는 것을 알 수 있습니다.

 주의하세요! 
  cout의 꺽쇠 기호는 << 왼쪽을 찌릅니다
  cin의 꺽쇠 기호는 >> 오른쪽을 찌릅니다

우리는 cin에서 정수를 입력 받을때 서식문자를 사용하지 않았다는 사실에 집중할 필요가 있습니다. cin은 자동으로 변수에 맞게 값을 입력 받아 줍니다.

4. cin-문자를 입력
#include <iostream>

using namespace std;

int main(void)
{
 
 char word;

 cin>>word;

 cout<<"input word is ";
 cout<<word;

 return 0;
}
A

input value is A

cin은 word가 char형 변수이기 때문에 자동으로 입력 받은 값을 char형으로 저장했습니다. 좀 더 쉽게 말하자면, cin은 word가 char형 변수이기 때문에 자동으로 %c를 사용한 것처럼 입력 받았습니다. 4번 소스를 다시 한번 봅시다. cout 또한 서식 문자를 사용하지 않았는데 word의 값을 문자로 출력해 주었군요. "cin과 cout는 변수에 맞게, 알아서 잘 작동하다"하는 것을 알 수 있습니다. 다음 소스는 이를 좀 더 잘 설명해줍니다.

5. 서식 문자가 필요 없다
#include <iostream>
using namespace std;
int main(void)
{

 char name[30]={};
 char word;
 int value;
 double fvalue;

 cin>>name;
 cin>>word;
 cin>>value;
 cin>>fvalue;

 cout<<"\ninput name is ";
 cout<<name;
 cout<<"\ninput word is ";
 cout<<word;
 cout<<"\ninput number is ";
 cout<<value;
 cout<<"\ninput real number is ";
 cout<<fvalue;

 return 0;
}
양현식

Y
-99
3.14

input name is 양현식
input word is Y
input number is -99
input real number is 3.14

실수뿐만 아니라 문자열 입력까지 잘 처리해줍니다.

C++의 다른 기초적인 문법들[편집]

5번 소스는 이렇게도 작성할 수 있습니다.

6. 서식 문자가 필요 없고, 이렇게도 쓸 수 있다
#include <iostream>
using namespace std;
int main(void)
{

 char name[30]={};
 char word;
 int value;
 double fvalue;

 cin>>name>>word>>value>>fvalue;

 cout<<"\ninput name is "<<name<<"\ninput word is "<<word<<"\ninput number is "<<value<<"\ninput real number is "<<fvalue;

 return 0;
}
양현식

Y
-99
3.14

input name is 양현식
input word is Y
input number is -99
input real number is 3.14

cout과 cout을 연이어 사용하는 대신 <<를 사용해 한번에 출력할 수 있습니다. 마찬가지로 cin과 cin을 연이어 사용하는 대신 >>를 사용해 한번에 입력 받을 수 있습니다.

 주의하세요! 
  "cout과 cout"을 <<을 사용해 더 짧은 코드로 쓸 수 있고, "cin과 cin"을 >>을 사용해 더 짧은 코드로 쓸 수 있지만,

  "cout과 cin"을 어떤 기호를 사용해 더 짧게 쓸 수 는 없습니다.   말하자면, <<을 쓰는 건 <<로, >>을 쓰는 건 >>로 줄일 수 있다라고 할 수 있습니다.

 예제 2번 
  이름, 전화번호, 주소를 입력 받고, 입력 받은 이름, 전화번호, 주소를 출력하는 프로그램을 코딩하고 실행해보세요.

  6번 소스처럼 <<을 사용해서 연속된 cout을 묶고 >>을 사용해 연속된 cin을 묶는 방법을 사용하세요.

cin과 cout을 알았다면 C에서 만들던 아주 작고 간단한 프로그램들은 다른 C++의 문법을 알지 못해도 작성할 수 있습니다. 여러가지 면에서 C와 C++은 비슷하기 때문입니다. 7번 소스는 C에서 for문을 배울때 익히 코딩해봤을 구구단 출력 프로그램입니다.

7. 구구단
#include <iostream>

using namespace std;

int main(void)
{

 int i, j;

 for(i=1; i<10; i++)
   for(j=1; j<10; j++)
     cout << i << "*" << j << "=" << i*j<<"\n"

 return 0;
}
1*1=1
1*2=2
1*3=3
1*4=4

...중략...

9*8=72
9*9=81

cin과 cout의 사용을 제외하면 C에서의 코딩과 그리 다르게 느껴지지 않습니다. 자, 다음은 C++에서 제공해주는 문법을 첨가시킨 구구단 출력 프로그램입니다. 무엇이 달라졌는지 찾아보세요.

8. 달라진 구구단
#include <iostream>

using namespace std;

int main(void)
{

 for(int i=1; i<10; i++)
   for(int j=1; j<10; j++)
     cout << i << "*" << j << "=" << i*j<<endl;

 return 0;
}
1*1=1
1*2=2
1*3=3
1*4=4

...중략...

9*8=72
9*9=81

첫째로, 변수를 선언(int i, int j)하는 부분이 for문 안으로 들어갔습니다. C에서 모든 변수는, 어떤 변수라도 사용되기 전에 모두 선언되어야 했습니다. 하지만 C++에서는 변수는 그 변수를 사용하기 전에만 선언하면 됩니다. 두번째로, new line 특수문자인 "\n"대신에 endl을 사용했습니다. endl은 line을 바꿔주는 기능과, 버퍼를 비워주는 기능을 가지고 있습니다.

 T I P 
  버퍼를 비워주는 기능이 무슨 말인가요?
   C를 공부할때 파일 스트림과 버퍼에 대해 배우지 않았다면 위 문장을 이해하지 못할 수 있습니다. 
  하지만 아무 상관 없습니다! C++을 좀 더 배우면서 우리는 파일 스트림과 버퍼에 대해서 다시 공부할 거거든요.
   endl을 그냥 line을 바꿔준다고 생각합시다!
 연습 문제 1번 
  예제 2번을 endl을 사용하여 다시 풀어보세요.
   예제 2번 : 이름, 전화번호, 주소를 입력 받고, 입력 받은 이름, 전화번호, 주소를 출력하는 프로그램을 코딩하고 실행해보세요.

정리[편집]

[C에서 C++로 넘어가기]에서 우리는 다음과 같은 것들을 배웠습니다. 다음 챕터로 넘어 가기 전에 기억을 더듬어 보세요. 복습은 최고의 공부법!

  1. printf()대신 cout, 그리고 왼쪽을 찌르는 꺽쇠 기호<<
  2. scanf()대신 cin, 그리고 오른쪽을 찌르는 꺽쇠 기호>>
  3. 여전히 사용 가능한 특수 문자! cout<<"\n";
  4. 이제 변수는 그 변수를 사용하기 전에만 선언하면 된다!
  5. endl의 기능 두가지. 한가지만 이해해도 문제 없어요.