2013-11-24 4 views
1

에서 큰 INT를 읽을 수 없습니다 : (. 그들은 RGB 값입니다)내가 txt 파일이 ifstream

4286484840 4286419048 4286352998 

내가 벡터에 저장하고 싶습니다.

void read_input(const char* file, std::vector<int>& input) 
{ 
    std::ifstream f(file); 
    if (!f) 
    { 
     std::cerr << file << "Read error" << std::endl; 
     exit(1); 
    } 

    int c; 
    while (f >> c) 
    { 
     std::cout << c << std::endl; 
     input.push_back(c); 
    } 

    std::cout << "Vector size is: " << input.size() << std::endl; 
} 

결과는 다음 파일로 그러나

Vector size is: 0 

:

1 2 3 

결과는 다음과 같습니다

1 
2 
3 
Vector size is: 3 

첫 번째 파일에 어떤 문제가 있습니까? 숫자가 너무 큽니까?

+0

'INT의 C; '->'긴 부호 C]와''' STD : 벡터 -> '표준 : 벡터 <부호 길이>' – P0W

답변

2

예, 숫자가 너무 많습니다. 현재 가장 일반적인 시스템에서는 int이 32 비트이고 최대 값은 2^31-1이지만 2^15-1 (16 비트 필요) 만 보장됩니다. 큰, 당신이 long long를 사용할 수있는 값에 대한 표현을 보장하기 위해

#include <limits> 
#include <iostream> 

int main() 
{ 
    std::cout << std::numeric_limits<int>::max(); 
} 

: 당신은 당신의 한계를 확인할 수 있습니다. unsigned long도 그렇게되지만 간신히합니다. 특정 크기의 정수가 필요한 경우 <cstdint> 헤더를 살펴 보는 것이 좋습니다.

0
void read_input(const char* file, std::vector<unsigned long int>& input) 
{ 

    std::ifstream f(file); 
    if (!f) 
    { 
     std::cerr << file << "Read error" << std::endl; 
     exit(1); 
    } 

    int c; 
    while (f >> c) 
    { 
     std::cout << c << std::endl; 
     input.push_back(c); 
    } 

    std::cout << "Vector size is: " << input.size() << std::endl; 
} 
관련 문제