>> 스피커 1 : 어디 보자 CS50 도서관에서,
특히 자사의 getInt 기능.
여기에서 우리는 실제 소스가 getInt를위한 코드입니다.
그리고 너무 오래하지의 통지 및 그것의 대부분은 while 루프를 구성 -
그의 무한 루프 - 만이 우리가 실제로 일단 값을 반환
우리가 기대했던 얻었다.
의 그것을 통해 살펴 보겠습니다.
>> 먼저 여기에 주목 루프가 시작되는 동안.
우리는 코드 라인을 가지고 있음을 알 다음 그 사실은,하는 GetString을 호출
및에 반환 값을 저장 변수, 문자열 형식, 라인했다.
우리는 전성 검사의 비트를 않습니다.
라인 == NULL의 경우에, 우리 호기심 INT_MAX를 반환합니다.
>> 지금은 INT_MAX가 있음을 밝혀 특별한 상수 다른 선언
그게 가장 큰 수를 지정합니다 당신이에 나타낼 수 있음을 int로
이 같은 프로그램입니다.
이제 우리는 임의로 반환하기로 결정했습니다 의 감시 값으로 INT_MAX
종류, 우리가 소유 한 하나 오류를 의미하는 것은 발생했습니다.
그래서 우리가 지불하는 가격은 물론이며, 그 getInt를 분명히 할 수 없습니다
실제로만큼 큰 숫자를 반환 INT_MAX,이에 원하는 경우에도 때문에,
그 반환 값은 정말해야 호출자에 의해 해석 -
누구든지 대해 getInt를 사용하는 것 -
어떤 종류의 오류로.
>> 다음으로,이 선언 한 것을 알 수 INT n을 입력하고 문자 다.
이 코드 다음 줄에, 나는 전화 sscanf를 호출 한 함수에 전달
네 개의 인수.
스트링 라인, 사용자의 형식입니다에 입력, "% i 서 %의 C",
I는 사용자의 세력에게 기대하고있어 해당 문자열 의 주소 다음 유형,
N 및 C의 주소.
인생에서 지금의 위해 sscanf 목적은 참으로 원하는 문자열을 검색하려면
특정 형식이 프로그래머 그 두 번째 인수로 지정했다.
이 경우, %의 난에 , % C는이 때문이다.
sscanf에서는의 int를 발견 그렇다면 사용자의 입력, 즉 INT가 저장됩니다
N이라는 변수의 내부에 있기 때문에 우리는 세 번째로 제공 한
N의 주소를 위해 sscanf 인수.
어떤 sscanf를 실제로 갈 수 있다는 것을 의미합니다 거기에, 그 안에 값을 업데이트합니다.
>> 이제, 경우에 사용자 유형 더 뭔가
하나 이상의 숫자 이상 -
즉, 어떤 종류의 문자 -
그 주소가 그 두 번째 변수 C, 우리는 네 번째로 sscanf에서에 전달
인수도 채워집니다.
이제 검사의 상승 사용자로부터의 추가적인 특성은
그가 또는 그녀가 협조하지 않을 경우, 그냥 INT 이상의 형식,
우리는이에 감지 할 수 있습니다 방법, 그 경우 sscanf에서 인해
의미, 2를 반환하는 것입니다 그 자리의 모두가 가득 차 있었다
값.
그러나 우리는 그 대신 sscanf를 바라고있어 단지 사용자를 의미하는 1을 반환
int를 제공했다.
>> 우리는 무엇을 할 경우 sscanf에서 실제로 1을 반환?
음, 우리는 즉시 라인을 확보하는 사용자가 다음에 입력하고, 우리
즉시 갖는 N 반환 int를 얻었다.
또, sscanf 또는 1을 반환하지 않는 경우 따라서 사용자는 협력하지 않았다
우리는 여전히 라인업을 확보하지만, 우리 지금 다시 시도하라는 메시지를 사용자에게 표시합니다.
그리고 우리는 그 내부에 여전히이기 때문에 그렇지 않으면 무한 루프 프로세스
다시 시작하고, 아마 다시 것이다 아마 다시 때까지 사용자가 실제로
우리에게 int를 제공합니다.