C++에서 정수를 입력받을때 공백없이 한번에 입력받는법

조회수 4214회

정수입력받을때 C에서는 scanf("%1d",&배열) 이런방법으로 한번에 입력받는게 가능한데 C++에서 scanf를 안쓰고 한번에 공백없이 받는방법 없나요? 문자열로 받아서 변환해주는거 밖에 모르겠는데 너무 번거로운거 같네요 ㅜ

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    아래 코드 처럼 한 글자씩 읽어와 숫자로 변환하는 것은 어떤가 싶네요.

    #include <iostream>
    
    int main() {
        int inputs[10];
    
        for (int& digit : inputs)
            digit = std::cin.get() - '0';
    
        for (int digit : inputs)
            std::cout << digit;
    
        return 0;
    }
    

    아니면 아래 처럼 함수를 하나 만들어 두어 좀더 쉽게 사용하는 방법도 있습니다.

    #include <iostream>
    
    template<typename T>
    struct Digits
    {
        typedef T* iterator;
        iterator begin, end;
    
        template<typename U, std::size_t size>
        Digits(U (&arr)[size]) : begin(arr), end(arr + size) {}
        Digits(T* arr, std::size_t size) : begin(arr), end(arr + size) {}
    };
    
    template<typename T>
    std::istream& operator>>(std::istream& s, Digits<T> v)
    {
        typedef typename Digits<T>::iterator iterator;
        for (iterator itor = v.begin, end = v.end; itor != end; ++itor)
            *itor = static_cast<T>(s.get() - '0');
        return s;
    }
    
    int main() {
        int inputs[10];
    
        std::cin >> Digits<int>(inputs);
    
        for (int digit : inputs)
            std::cout << digit;
    
        return 0;
    }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)