스피커 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를 제공합니다.