COLUMNA 1: Imos dar un ollo na biblioteca CS50, especialmente a súa función GetInt. Aquí temos a verdadeira fonte código para GetInt. E teña en conta que non é moito tempo, e a maior parte dela constitúe un loop while - un loop infinito en que - de que só retorna un valor, xa que o que realmente obtido o que esperabamos. Imos atravesalo-la. Observe-se aquí por primeira vez, o while comeza. Observe próxima que temos unha liña de código que realmente chama GetString, e almacena o valor de retorno dunha variable, liña chamada, do tipo cadea. A continuación, facer un pouco de unha proba de sanidade. Se a liña == null, entón nós curiosamente volver INT_MAX. Agora verifícase que é un INT_MAX constante especial declarado noutro lugar que especifica o maior posible int que pode representar nun programa como este. Agora nós arbitrariamente decidiu volver INT_MAX como un valor de sentinela de tipo, o que temos reservado como o que significa que se produciu un erro. Así, o prezo que pagamos, por suposto, é GetInt que, ao parecer, non pode realmente voltar un número tan grande como INT_MAX, porque aínda que el quere, que o valor de retorno que realmente ser interpretado polo interlocutor - quen está a usar GetInt - como un erro de calquera tipo. Logo entender que eu xa declarou un int n e un char c. Nesta próxima liña de código, que eu chamo de función chamada sscanf, pasando catro argumentos. liña, que é a secuencia do usuario tecleada, "% i% c", que é un formato cadea que estou esperando o poder do usuario tipo, seguíndose o enderezo de n, e o enderezo de c. Agora propósito do sscanf na vida é de feito para varrer unha cadea a buscar o formato específico que o programador especificou como o segundo argumento. Neste caso, é en% i alí, como é% c. Entón, se sscanf atopa un int no de entrada do usuario, que int pode ser almacenada dentro da variable chamada n porque que proporcionaron o terceiro argumento de sscanf o enderezo do n. O que significa que sscanf realmente pode ir alí, e actualizar o valor nel. Agora, se o usuario escribe en algo máis dun ou máis díxitos - noutras palabras, un carácter dunha especie - que segundo c variable, cuxo enderezo pasamos en sscanf como a súa cuarta argumento tamén se enche. Agora, a cabeza de verificación dun carácter adicional do usuario é que, se el ou ela non cooperar, e tipo en máis que un int, nós imos ser capaces de detecta-lo neste maneira, porque, nese caso, sscanf Vai voltar 2, significando que ambos espazos reservados foron cubertas con valores. Pero estamos esperando que sscanf vez regresa 1, o que significa que só o usuario solicitado un int. O que imos facer se sscanf en realidade, volve 1? Ben, nós inmediatamente liberar a liña que o usuario inseriu, e entón nós voltar inmediatamente n, tendo obtido un int. Outra cousa, se sscanf non retornar 1, e o usuario, polo tanto, non cooperar, aínda liberar a liña, pero nós agora solicitar ao usuario que tente de novo. E por que aínda estamos dentro dese repetición infinita, o proceso de vai comezar de novo, e quizais de novo, e quizais unha vez máis, ata que o usuario realmente ofrece-nos un int.