관리 메뉴

cococo-coding

4470번. 줄번호(c++풀이) - getline(), ignore() 함수 사용법 본문

[BOJ] 코드 모음/C++_learning 문제집

4470번. 줄번호(c++풀이) - getline(), ignore() 함수 사용법

_dani 2024. 1. 11. 19:30

문제

풀이

문제자체는 간단하나,  ignore() 와 같은 함수를 알지 못하면 계속 틀릴 수 있다.

 

1. 줄의 수 n을 입력받는다. 이때 ignor()함수로 남아있는 버퍼를 지워준다.

2. for문을 이용해 str을 입력받는다. 이때 str은 공백이 포함되어 있는 문자열이므로 getline()을 이용한다.

3,4. for문에서 사용한 i를 줄 번호로 이용하고, 뒤에 str을 출력한다. 

 

포인트

cin.ignore();을 꼭 써준다. 

cin >> n; 에서 n을 입력하게 되면 표준입력버퍼에 개행문자(=\n)가 남아있게 된다. 이를 지워주는 역할을 한다.

만약 cin.ignore(); 코드가 없다면 아래와 같이 "1. " 만 출력이 된다. 

getline() 함수 앞에서 ignore() 함수가 버퍼를 비워주는 역할을 해야 정상적인 출력이 나온다. 

cin.ignore() 를 쓰지 않은 경우, 앞의 입력버퍼가 남아 1. 만 출력이 된다.

cin.ignore() 특징

1. cin으로 입력받는 경우 버퍼에 '\n'이 남는다.

2. cin 다음 입력이 cin인 경우는 전 버퍼에 있는 공백 및 개행문자를 무시하므로 버퍼를 안 비워도 된다.

3. cin 다음 입력이 getline인 경우는 전 버퍼에 있는 공백 및 개행문자가 남아있으므로 버퍼를 지워줘야 한다.

4. getline 다음 입력이 getline인 경우는 버퍼를 안 지워도 된다. (getline은 '\n'을 버퍼에 포함시키지 않으므로)

 

-> 1번, 3번의 경우는 ignore()로 버퍼를 지워줘야 한다. 

 

**출처: 별의 블로그 :: [C++] 입력 함수 : cin(), getline() (and cin.ignore()) (tistory.com) 

정리가 굉장히 잘 되어있어서 문제를 푸는데 많은 도움을 받았다. 다들 참고하시면 좋을 것 같다. 

 

[C++] 입력 함수 : cin(), getline() (and cin.ignore())

입력 함수 : cin(), getline() (and cin.ignore()) 들어가며 C++의 입력 함수인 cin()과 getline() 함수에 대해 알아보자. 그리고 입력 버퍼를 비우는데 사용되는 cin.ignore() 함수에 대해 간단히 알아보자. cin() 헤

starrykss.tistory.com

 

코드

#include <iostream>
#include <string>
using namespace std;
/*
    1. 줄의 수 n을 입력받는다.
    2. 각 줄마다 문장을 입력받는다.
    3. 문장마다 줄 번호를 추가한다.
    4. 줄 번호가 추가된 문장을 출력한다.
*/

int main() {
    //1
    int n;
    cin >> n;
    cin.ignore(); //표준입력버퍼에 개행문자(\n)를 지워주는 역할
    //ignore()을 안 쓰면 이 코드에서 n만 입력되고 str을 입력받지 않았는데
    //1. 만 출력되는 현상이 발생함.

    //2
   for(int i=1; i<=n; i++){
        string str;
        getline(cin, str);

        //3,4
        cout << i << ". " << str << endl;

   } 
    return 0;
}