2014-12-02 10 views
1

안녕하세요 char를 int로 변환하려고합니다. 나는 scanf, "10101"을 통해 입력 된 문자 배열을 가지고 있으며 int 배열의 요소를 그 char 배열 요소와 같게 설정하려고합니다.atoi를 사용하여 int 배열에 char 배열 캐스팅

예를 입력 :

char aBuff[11] = {'\0'}; 
int aDork[5] = {0}; 

scanf("%s", aBuff); //aBuff is not equal to 10101, printing aBuff[0] = 1, aBuff[1] = 0 and so on 

10101

가 지금은 1aBuff[0] 동일하게 aDork[0]를 원한다.
다음은 내가 지금까지 가지고있는 것입니다.

//seems to not be working here 
//I want aDork[0] to = aBuff[0] which would be 1 
//But aDork[0] is = 10101 which is the entire string of aBuff 
//aBuff is a char array that equals 10101 
//aDork is an int array set with all elements set to 0 

int aDork[5] = {0} 
printf("aBuff[0] = %c\n", aBuff[0]); //value is 1 
aDork[0] = atoi(&aBuff[0]); //why doesnt this print 1? Currently prints 10101 
printf("aDork[0] = %d\n", aDork[0]); //this prints 1 

printf("aBuff[1] = %c\n", aBuff[1]); //this prints 0 
printf("aBuff[2] = %c\n", aBuff[2]); //this prints 1 
+0

주조는 (강제) 유형 변환입니다. 'atoi '와 같이 구문 분석하지 않습니다. – Deduplicator

+0

그래서 문자 배열의 각 요소를 리터럴 int 1 또는 int 0이되도록하려면 어떻게해야합니까? – Yawn

+0

char 값과 int 값 (한자리 숫자)의 차이는 0x30 ('0')입니다. aDork [0] = aBuff [0] - '0'; aDork [1] = aBuff [1] - '0'; etc. – user3629249

답변

3

당신은 질문 :

aDork[0] = atoi(&aBuff[0]); // why doesnt this print 1? Currently prints 10101 

그것은 너무 때문에 않습니다

&aBuff[0] == aBuff; 

가 상당입니다. 배열의 첫 번째 요소의 주소는 배열 자체를 참조 할 때 얻은 주소와 같습니다. 그래서 당신은 말을하는지 : aBuff에서 전체 문자열를 받아 그 정수 값을 평가

aDork[0] = atoi(aBuff); 

합니다.

aDork[0] = aBuff[0] - '0'; // '1' - '0' == 1, '0' - '0' == 0, etc. 

지금

aDork[0] == 1; 

예를 작동 : 당신이 자리의 값을 얻고 싶다면, 그렇게이 코드는 예상하고있다으로 https://ideone.com/3Vl3aI

+0

나는 aBuff [1]이 (와) 동등하다는 것을 알아야하지 않을까요? 예를 들어 aDork [1] = aBuff [1]을 원하고 aBuff [1]이 '1'또는 '0'과 같은지 여부를 모르겠다면 aDork [1] = aBuff [1] - '0'은 1을 생성하기 때문에? – Yawn

+0

아니요. 'aBuff [1] =='0 ''인 경우 'aBuff [1] -'0 '은'0 '-'0 '과 동일하며 물론'0 '입니다. 예제를 보라 - 모든 숫자를'aBuff' 배열의 정수로 변환한다. –

+0

고맙습니다. – Yawn

1

을,하지만 당신은 atoy가 어떻게 작동하는지 이해하지 못함 :

이제는 aDork [0]가 버프 [0] 1

하지만

aDork[0] = atoi(aBuff);

될 것이라고하면 aDork [0] aBuff의 정수 값을 저장할 의미한다. 문자열 "10101"

PS를 값 10101이 아니라 의미 : 당신이 aDork에 대한 문자의 배열을 필요로하지 않았다

int aDork = 0; 
aDork = atoi(aBuff); 

은 충분하다.

1

aBuff이 0과 1의 문자열 (길이가 aDork을 초과하지 않음)을 포함한다고 가정하면 다음은 이러한 값을 정수 배열로 전송합니다.