cin

Kiwoong Park·2023년 7월 14일
0

출처 : C++ 실력 완성 올인원 패키지 Online(fastcampus)

정수 입력 시 cin과 scanf 차이

#include <iostream>
using namespace std;

int main()
{
	int a;
    cin >> a; /* scanf("%d%',&a) 
    ~ 함수 밖에 있는 값을 변경해주기 위해 주소값을 넘겨줘야 함
    c++의 경우는 참조라는 것을 이용해서 인자를 
    넘겨주면 밖에 있는 변수도 함수 내부에서
    변경이 가능함.
    */
    cout << a;
}

입력이 실패한 경우

	// 입력이 성공했을 때만 출력
    // 10 입력 성공
    // a  입력 실패
    int num;
    if (cin >> num) // a를 넣으면 아무것도 출력되지 않음.
        cout << num << endl;

    // 입력 실패 처리
    int num;
    cin >> num; 
    cout << num << endl;

    // 입력이 실패했을 경우 초기화 시켜준다.
    if (cin.fail()) // 입력이 실패하면 fail 값이 1
        cin.clear(); // 실패한 경우에는 cin을 초기화시켜줘야 그 다음 cin을 처리해줄 수 있음.
        
    // 버퍼에 남은 문자 한 개를 무시
    // cin.ignore();

    // 개행 문자(or 특정 문자가 입력으로)가 나올 때까지 무시한다.
    cin.ignore(numeric_limits<streamsize>::max(), '\n');

💘flag 설정 : bool, 진수 입력으로 받기

    {
        // bool 입력을 1/0로 받기
        bool b;
        cin >> b;
        cout << b << endl;

        // bool 입력을 true/false로 받기
        cin.setf(ios_base::boolalpha);
        cin >> b;
        cout << b << endl;
    }
    {
        // 16 진수로 입력 받기
        int num;
        // cin.setf(ios_base::hex) 는 세가지 이상의 flag가 존재하므로 두번째 파라미터를 넣어줘야 됨.
        cin.setf(ios_base::hex, ios_base::basefield);
        cin >> num; // 10 ~ 16진수의 10
        cout << num << endl; // 16 ~ 10진수 값

        cin >> hex >> num; // 10 ~ 16진수로 받기
        cout << num << endl; // 16
    }

파일로 받기

#pragma warning(disable: 4996)
#include <iostream>
#include <limits>
using namespace std;

int main()
    {
        freopen("input.txt", "r", stdin);

        int num;
        cin >> num;
        cout << num << endl;
    }

profile
You matter, never give up

0개의 댓글