프로그래밍 언어/C++

1) C++ 프로그래밍의 기본

busy맨 2023. 11. 1. 11:12

1. C++ 기본 요소와 화면 출력

1) 소스파일의 확장자 cpp

  • C 프로그램의 소스 파일: *.c 파일
  • C++ 프로그램의 소스 파일: *.cpp 파일

 

2) main() 함수

  • C++ 프로그램의 실행을 시작하는 함수
    • main() 함수가 종료되면 C++ 프로그램도 종료
  • main() 함수의 C++ 표준 모양
int main()	//main()의 리턴 타임 int
{
	........
    return 0;
}

 

3) #include<iostream>

  • 전처리기에게 내리는 지시
    • <iostream> 헤더 파일을 컴파일 전에 소스에 확장하도록 지시
  • <iostream> 헤더파일
    • 표준 입출력을 위한 클래스와 객체, 변수 등이 선언
  • 스트림(stream)
    • 데이터의 흐름, 혹은 데이터를 전송하는 소프트웨어 모듈
    • 스트림의 양 끝에는 프로그램과 장치 연결
      • 보낸 순서대로 데이터 전달
    • 종류
      1. 입력 스트림
        • 입력 장치, 네트워크, 파일로부터 데이터를 프로그램으로 전달하는 스트림
      2. 출력 스트림
        • 프로그램에서 출력되는 데이터를 출력 장치, 네트워크, 파일로 전달하는 스트림
    • C++ 입출력 스트림은 버퍼를 가짐
      1. 키 입력 스트림의 버퍼
        • 목적
          • 입력장치로부터 입력된 데이터를 프로그램으로 전달하기 전에 일시 저장
          • 키 입력 도중 수정 가능
            • <backspace>키가 입력되면 이전에 입력된 키를 버퍼에서 지움
        • 프로그램은 사용자의 키 입력이 끝난 시점에서 읽음
          • <Enter>키가 입력된 시점부터 키 입력 버퍼에서 프로그램이 읽기 시작
      2. 스크린 출력 스트림 버퍼
        • 목적
          • 프로그램에서 출력된 데이터를 출력 장치로 보내기 전에 일시 저장
          • 출력 장치를 반복적으로 사용하는 비효율성 개선
        • 버퍼가 꽉 차거나 강제 출력 명령 시에 출력 장치에 출력

키 입력 스트림과 버퍼의 역할
스크린 출력 스트림과 버퍼의 역할

 

4) 출력 객체인 cout을 이용한 화면 출력

  • C++에서의 출력
    • 출력 객체인 cout을 이용
    • "cout<<값" 형식으로 출력
      • << 연산자 다음에 기본형의 변수를 지정하면 자동으로 데이터 형에 맞추어 출력
      • 정수, 실수, 문자열 출력 가능
  • cout 객체
    • 스크린 출력 장치에 연결된 표준 C++ 출력 스트림 객체
    • <iostream> 헤더 파일에 선언
      • std 이름 공간에 선언: std::cout으로 사용
#include<iostream>

int main()
{
	std::cout<<"Hello\n";

	return 0;
}
  • <<연산자
    • 스트림 삽입 연산자
      • C++ 기본 산술 시프트 연산자(<<)가 스트림 삽입 연산자로 재정의됨
      • cout 객체에 연결된 화면에 출력
    • 여러 개의 << 연산자로 여러 값 출력
#include<iostream>

int main()
{
	std::cout<<"Hello\n"<<"How are you?\n";

	return 0;
}

Ex)

#include <iostream>

double area(int r); // 함수의 원형 선언

double area(int r) 
{ // 함수 구현
return 3.14*r*r; // 반지름 r의 원면적 리턴
}

int main() 
{
    int n=3;
    char c='#';
    std::cout << c << 5.5 << '-' << n << "hello" << true << std::endl;
    std::cout << "n + 5 = " << n + 5 << '\n'; 
    std::cout << "면적은 " << area(n); // 함수 area()의 리턴 값 출력
}

result

 

2. namespace

1) namespace 개념

  • 이름(identifier) 충돌이 발생하는 경우
    1. 여러 명이 서로 나누어 프로젝트 개발하는 경우
    2. 오픈 소스 혹은 다른 사람이 작성한 소스나 목적 파일을 가져와서 컴파일 하거나 링크하는 경우
  • namespce 키워드
    • 이름 충돌 해결
    • 개발자가 자신만의 namespace을  생성할 수 있도록 함
      • namespace  안에 선언된 이름은 다른 namespace와 별도로 구분
    • namespace 사용

 

3. 입출력

1) std::

  • ANSI C++ 표준에서 정의한 namespace 중 하나
  • <iostream>헤더 파일에 선언된 모든 이름
  • using 지시어를 통해 std:: 를 생략
#include<iostream>
using namespace std;

int main()
{
	cout<<"Hello"<<endl;	//std:: 생략
}

2) cin을 이용한 키 입력

  • C++에서의 입력
    • 입력 객체인 cin 이용
    • "cin>>변수" 형식으로 입력
    • 변수의 데이터 형에 맞추어 입력처리
  • >>연산자
    • 스트림 추출 연산자(stream extraction operator)
      • C++ 산술 시프트 연산자(>>)가 <iostream> 헤더 파일에 스트림 추출 연산자로 재정의됨
      • 입력 스트림에서 값을 읽어 변수에 저장
      • 연속된 >> 연산자를 사용하여 여러 값 입력
      • 문자열을 입력할 때는 빈칸 없이 입력해야 한다.
    • 연산자는 빈칸이 입력될 때까지를 하나의 입력으로 처리하므로 빈칸을 포함한 문자열을 입력 받으려면 별도의 방법을 사용해야 한다.
#include <iostream> 
using namespace std;

int main() 
{
    cout << "너비를 입력하세요>>";
    int width;
    cin >> width; // 키보드로부터 너비를 읽어 width 변수에 저장
    
    cout << "높이를 입력하세요>>";
    int height;
    cin >> height; // 키보드로부터 높이를 읽어 height 변수에 저장
    
    int area = width*height; // 사각형의 면적 계산
    cout << "면적은 " << area << "\n"; // 면적을 출력하고 다음 줄로 넘어감
}

result

(3) cin으로부터의 키 입력 오류

  • cin.fail()
    • cin 오류 시 1을 반환하고 0을 반환
  • cin.clear()
    • cin 객체의 내부 상태 flag를 초기화시켜 cin 관련 기능이 정상 작동하도록 함
    • 오류 사실 제거
  • cin.ignore(최대확인글자수, '문자') 
    • 입력 버퍼 지우기
    • 최대 수만큼 버퍼에 있는 문자를 지우고, '문자'가 나타나면 '문자'까지 지움
#include <iostream> 
using namespace std;

int main() 
{
	cin>>val;
    
    if(cin.fail()==1)	//I/O오류가 발생하면
    {
    	cin.clear();	//모든 오류비트 clear
        cin.ignore(256,'\n');	//최대 256개의 문자 무시가능, 개행 문자를 만나면 추출을 멈춤
    }
}

 

(4) C++ 문자열

  • 문자열 표현 방식
    1. C-스트링 방식
      • '\0'으로 끝나는 문자 배열
      • <cstring>이나 <string.h> 헤더파일 사용
        • C++ 표준 방식인 을 사용하는 것이 바람직
    2. 단순 문자 배열
      • 배열 또는 동적으로 메모리 할당
        • char형 배열을 선언

#include <iostream>
using namespace std;

int main() 
{
    cout << "이름을 입력하세요>>";
    char name[11]; // 한글은 5개 글자, 영문은 10까지 저장할 수 있다.
    cin >> name; // 키보드로부터 문자열을 읽는다.
    cout << "이름은 " << name << "입니다"<<endl; // 이름을 출력한다.
}

띄어쓰기 없이 입력한 경우

 

띄어쓰기를 하여 입력한 경우

5) string 클래스

  • #include<string>
  • 문자열의 크기에 제약이 없음
    • string 클래스가 스스로 문자열 크기에 맞게 내부 버퍼 조절
  • 문자열 복사, 비교, 수정 등을 위한 다양한 함수와 연산자 제공
  • c-string 방식보다 다루기 쉬움
#include <iostream>
#include <string>
using namespace std;

int main() 
{
    string song("Falling in love with you"); // 문자열 song
    string elvis("Elvis Presley"); // 문자열 elvis
    string singer; // 문자열 singer
    cout << song + "를 부른 가수는"; // + 로 문자열 연결
    cout << "(힌트 : 첫글자는 " << elvis[0] << ")?"; // [] 연산자 사용
    getline(cin, singer); // 문자열 입력
    if(singer == elvis) // 문자열 비교
    cout << "맞았습니다.";
    else
    cout << "틀렸습니다. "+ elvis + "입니다." << endl; // +로 문자열 연결
}

'프로그래밍 언어 > C++' 카테고리의 다른 글

3) 개선된 함수 기능  (0) 2023.11.01
2) 포인터와 레퍼런스  (1) 2023.11.01
22.05.27) C++  (0) 2023.01.15
22.05.10) C++  (0) 2023.01.15
22.05.03) C++  (0) 2023.01.15