HÖGTALARE 1: Låt oss ta en titt på CS50 biblioteket, specifikt dess getInt funktion. Här har vi den verkliga källan kod för getInt. Och märker att det inte är för lång, och mesta av den utgör en while-slinga - en oändlig loop på det - att endast returnerar ett värde när vi har faktiskt fått vad vi förväntat. Låt oss gå igenom det. Lägg märke till här uppe först, det medan slingan börjar. Lägg märke bredvid att vi har en rad kod som faktiskt kallar GetString, och lagrar det returnerade värdet i en variabel, kallad linje, av typen sträng. Vi gör sedan en bit av en sanity check. Om linje == null, då vi nyfiket återgå INT_MAX. Nu visar det sig att INT_MAX är en speciell konstant deklareras annorstädes som anger den största möjliga int att du kan representera i en program som detta. Nu har vi godtyckligt valt att återvända INT_MAX som en vaktpost värde typer, en som vi har reserverat som vilket innebär ett fel har uppstått. Så det pris vi betalar, är naturligtvis att getInt kan uppenbarligen inte faktiskt tillbaka ett antal så stort som INT_MAX, för även om den vill, som returvärde borde verkligen tolkas av den som ringer - den som är med hjälp getInt - som ett fel av något slag. Därefter märker att jag har förklarat en int n och en röding c.. I detta nästa kodrad, kallar jag en Funktionen kallas sscanf, passerar fyra argument. linje, som är den sträng användarens skrivas in, "% i% c", som är ett format sträng som jag väntar användaren kan typ, följt av adressen till n, och adressen till c.. Nu sscanf s syfte i livet är verkligen att skanna en sträng söker den särskilt format att programmeraren har angetts som det andra argumentet. I detta fall är% i är i där, som är% c. Så om sscanf möter en int i användarens input, kommer att int lagras insidan av variabel kallad n, eftersom vi har gett som den tredje Argumentet att sscanf adressen n. Vilket betyder att sscanf faktiskt kan gå det, och uppdatera värdet däri. Nu, i fall användaren skriver i något mer än en eller flera siffror - med andra ord, en röding av något slag - den andra variabeln c, vars adress Vi gick in i sscanf som sin fjärde argument kommer också att befolkas. Nu uppsidan på sökning efter en ytterligare tecken från användaren är att om han eller hon inte samarbetar, och typer i mer än bara en int, Vi kommer att kunna upptäcka det i detta sätt, eftersom det i det fallet sscanf kommer att återvända 2, vilket innebär att båda platshållare fylldes med värden. Men vi hoppas att sscanf istället returnerar 1, vilket betyder att användaren endast förutsatt en int. Vad gör vi om sscanf verkligen returnerar 1? Tja, vi omedelbart befria den linje som användaren har skrivit in, och då vi omedelbart åter n, som har fått en int. Annars, om sscanf inte returnerar 1, och användaren därför inte samarbetade, vi fortfarande frigöra linjen, men vi nu uppmana användaren att försöka igen. Och eftersom vi är fortfarande inne i det annars oändlig slinga, processen kommer att börja igen, och kanske igen, och kanske igen, tills användaren faktiskt ger oss en int.