2014-04-25 6 views
0

W $ 65345 $ 23425와 같이 '$'로 구분 된 파일을 읽었으며 getchar()을 사용하여 값을 가져 왔습니다 (n = getchar()! = '$') 등등. 두 번째 값을 얻을 때 정수 목록을 만들고 그 목록을 getchar()로 채 웁니다. 그래서 나는 [6,5,3,4,5]의 목록을 가지고 있다고 확신합니다. 65345 값으로 정수로 변환하려면 어떻게해야합니까?C에서 getchar()에서 큰 int를 가져 옵니까?

void read_data(char* pa,int* pb,double* pc){ 
     int n; 
     pa = &n; 
     n = getchar(); 

     int j[25]; 
     int m = 0; 
     while ((n=getchar()) != '$'){ 
       j[m] = n; 
       m++; 
     } 
     pb = &j; 

     n = getchar(); 

     int x[25]; 
     m = 0; 
     while ((n=getchar()) != '$'){ 
       x[m] = n; 
       m++; 
     } 
     pc = &x; 
     return ; 
} 
+0

'getchar()'의 리턴 타입은'char'이 아니라'int'입니다. 먼저 수정해야합니다. –

+0

문자열을 숫자로 변환하려면'strtol'을 사용하십시오. – Rohan

+0

'pb = strtol (& j)'? – user3516302

답변

2

getcharintunsigned char 캐스트과 같이 문자를 반환이

int read_data() 
{ 
    int n = getchar(); 
    int ret = 0; 
    while(n != '$') 
    { 
     ret = 10 * ret + n - '0'; 
     n = getchar(); 
    } 
    return ret; 
} 
+0

불필요한 상태. 'n> = '0'&& n <= '9''이면 확실히'n! = '$' '이므로''$' '을 테스트 할 필요가 없습니다. – CiaPan

+0

@CiaPan; 편집했습니다. – haccks

0

참고하십시오 : 다음은 내 코드입니다.

j[m] = n; 

당신은 long int에 문자열을 변환하는 표준 라이브러리 함수 strtol을 사용할 수 있습니다 - 이것은 아래의 문이 getchar에 의해 판독 된 문자의 문자 코드 (ASCII 값) 할당을 의미합니다. int 배열을 char 배열로 변경해야합니다.

char *endptr; // needed by strtol 

// note that the size of the array must be large enough 
// to prevent buffer overflow. Also, the initializer {0} 
// all elements of the array to zero - the null byte. 
char j[25] = {0}; 

int m = 0; 
while ((n = getchar()) != '$'){ 
    j[m] = n; 
    m++; 
} 

// assuming the array j contains only numeric characters 
// and null byte/s. 
// 0 means the string will be read in base 10 
int long val = strtol(j, &endptr, 0);