2012-12-07 3 views
0

저는 C로 시작하려고합니다. ATOL 기능을 배우려고합니다. 누군가가 왜 인쇄를 계속하는 이유를 말해 줄 수 있습니까? 나는 그것이 전환이 수행 될 수 없다는 것을 의미하지만, 나는 왜 그런지 모르겠다.ATOI가이 코드에서 0을 반환하는 이유는 무엇입니까?

#include <stdio.h> 
#include <stdlib.h> 

int main (void) 
{ 
    int i = atoi (" bl149"); 
    printf("%d\n", i); 
    return 0; 
} 
+4

'b'는 진수 아니다 반환합니다. – Mat

+1

그냥 이걸 봐 - http://stackoverflow.com/questions/2729460/why-do-i-get-this-unexpected-result-using-atoi-in-c?rq=1 – nightlytrails

+0

첫째, C 사건입니다 - 민감한 언어. 그래서 그것은'ATOI'가 아니라'atoi'이어야합니다. 둘째, 질문의 본문에서 'ATOL'기능에 대해 이야기하고 있습니다. ATOI 나 ATOL인가요? – AnT

답변

5

atoi는 기본적으로 숫자가 1 인 정수로 변환하고 변환 할 내용은 반환 값이됩니다. 또는 atoi 함수가 문자열의 처음부터 검사를 시작하는 것이 정확합니다. 숫자가있는 경우 (처음부터) 정수로 그 값을 반환합니다. 예를 들어 아래 는 ("b1149") 당신의 문자열 B에서 시작하기 때문에 귀하의 경우에는 예를

atoi("1234") 
--> it will convert string "1234" in to integer and return it 
     --> i.e. ouput is 1234 
atoi("1234abcd") --> i.e. ouput is 1234 
atoi("a1234abcd") --> i.e. ouput is 0 

를 들어 개념 을 취소합니다 그래서 0

+0

오, 알겠습니다. 그래서 정수로 시작해야합니다. 나는 당신이 의미하는 바를 알고, 캐릭터에 관계없이 어떤 문자열에서도 정수를 얻을 수 있다고 생각했습니다. 감사! –

2

정확하게 이해하지 못하는 부분은 무엇입니까? " bl149"은 숫자의 유효한 표현이 아닙니다. 따라서 atoi은 잘못된 입력이있을 때 항상 그렇듯이 0을 반환합니다. 그게 전부입니다.

올바른 표현은 일련의 공백 문자로 시작할 수 있지만 선택 사항 인 +/-과 십진수 시퀀스가 ​​와야합니다. 공백 문자 시퀀스 뒤에 b이옵니다. b은 10 진수가 아닙니다.

어떻게 작동 했습니까? 이 경우 atoi이 무엇을 기대 했습니까?

관련 문제