개발 공부/코딩 공부

C++ 입출력

baby-t 2025. 9. 15. 15:00

기본 표준 입출력 (<iostream>)

콘솔(터미널)을 통해 데이터를 입출력할 때 사용합니다.

  • cin: 키보드로부터 데이터를 입력받습니다. 공백이나 줄바꿈을 기준으로 끊어서 읽습니다.
  • C++
     
    int age;
    string name;
    cin >> name >> age;
    
  • cout: 화면에 데이터를 출력합니다.
  • C++
     
     
  • cout << "Hello, " << name << "!\n";
    
  • getline(): 공백을 포함한 한 줄 전체를 입력받고 싶을 때 사용합니다.
  • C++
     
    string address;
    getline(cin, address);
    

     

    getline 앞에 공백이 있을때 해결 방법.

    해결책 1: cin.ignore() (가장 표준적인 방법)

    cin으로 숫자나 단어를 입력받은 직후, 버퍼에 남아있는 엔터(\n) 문자를 강제로 읽어서 없애버리는 것입니다.

    • 잘못된 코드:
    • C++
       
      int n;
      cin >> n; // 사용자가 5를 누르고 [Enter]를 침
      // -> '5'는 n으로 가고, '\n'은 버퍼에 남음
      
      string s;
      getline(cin, s); // '\n'을 만나자마자 "빈 줄"을 읽고 종료됨
      
    • 수정된 코드:
    • C++
       
      int n;
      cin >> n; 
      cin.ignore(); // 버퍼에 남아있는 '\n'을 무시하고 삭제함
      
      string s;
      getline(cin, s); // 이제 정상적으로 다음 줄을 기다림
      

    해결책 2: cin >> ws (더 깔끔한 방법)

    C++에는 ws라는 "공백 문자 제거(whitespace manipulator)" 기능이 있습니다. getline이 입력을 받기 직전에 cin >> ws를 먼저 실행시켜서, 버퍼에 남아있는 모든 공백(스페이스, 탭, 엔터 등)을 무시하고 다음 실제 문자가 나올 때까지 기다리게 만듭니다.

    C++
     
    int n;
    cin >> n; 
    
    string s;
    // cin에서 ws(모든 공백)를 먼저 처리하고, 그 다음 getline을 실행
    getline(cin >> ws, s); 
    
    cout << s; // 정상적으로 다음 줄이 입력됨
    

    cin.ignore()는 정확히 \n 하나만 지우는 반면, cin >> ws는 남아있는 모든 종류의 공백을 다 지워주기 때문에 좀 더 강력하고 깔끔한 방법입니다.


파일 입출력 (<fstream>)

파일을 읽고 쓸 때 사용하는 기능입니다.

  • ifstream: 파일의 내용을 읽어올 때 사용합니다.
  •  
    #include <fstream>
    #include <string>
    
    ifstream inputFile("data.txt"); // 읽기용으로 파일 열기
    string line;
    while (getline(inputFile, line)) {
        // 파일 내용 한 줄씩 처리
    }
    
  • C++
     
  • ofstream: 파일에 내용을 쓸 때 사용합니다.
  • C++
     
    #include <fstream>
    #include <string>
    
    ofstream outputFile("result.txt"); // 쓰기용으로 파일 열기
    outputFile << "This will be written to the file.\n";
    

문자열 스트림 (<sstream>)

문자열을 파일처럼 다루어 입출력을 할 수 있게 해주는 기능입니다. 문자열을 파싱하거나 특정 형식으로 만들 때 유용합니다.

  • stringstream: 문자열로부터 데이터를 읽거나 문자열에 데이터를 쓸 때 모두 사용합니다.
  • C++
     
    #include <sstream>
    #include <string>
    #include <vector>
    
    string data = "Alice 30 95.5";
    stringstream ss(data);
    
    string name;
    int age;
    double score;
    
    ss >> name >> age >> score; // 문자열에서 변수로 데이터 추출
    

입출력 속도 향상 (주로 코딩 테스트용)

cin과 cout의 속도를 향상시키기 위해 사용합니다.

C++
 
// main 함수 시작 부분에 추가
ios_base::sync_with_stdio(false);
cin.tie(NULL);
  • ios_base::sync_with_stdio(false): C++와 C의 표준 스트림 동기화를 끊어 속도를 향상시킵니다.
  • cin.tie(NULL): cin과 cout의 묶음을 풀어 입출력 속도를 높입니다.

'개발 공부 > 코딩 공부' 카테고리의 다른 글

최대 공약수, 최소 공배수  (0) 2026.04.02
C++ 람다식  (0) 2025.09.16
프로그래머스 리스트 자르기  (0) 2025.09.13
c++ <limits>, const &auto  (0) 2025.09.03
복사와 함수 인자 전달 , 그리고 메모리  (0) 2025.09.03