Sprecher 1: Lassen Sie uns einen Blick an der CS50-Bibliothek, insbesondere seine GetInt Funktion. Hier haben wir die eigentliche Quelle Code für GetInt. Und feststellen, dass es nicht zu lange, und der größte Teil davon stellt eine while-Schleife - eine Endlosschleife an, dass - dass nur gibt einen Wert zurück, sobald wir eigentlich bekommen, was wir erwartet haben. Lassen Sie uns durch sie hindurchgehen. Beachten Sie hier zunächst die while-Schleife beginnt. Beachten Sie, dass wir neben einer Codezeile dass tatsächlich ruft GetString, und speichert den Rückgabewert in eine Variable, genannt Linie vom Typ String. Dann machen wir ein bisschen eine Plausibilitätsprüfung. Wenn Linie == null, dann werden wir neugierig zurück INT_MAX. Jetzt stellt sich heraus, dass INT_MAX ist ein spezielle Konstante an anderer Stelle erklärt dass die größtmögliche gibt int, dass Sie in einem darstellen kann Programm wie dieses. Jetzt haben wir willkürlich entschieden zurück INT_MAX als Sentinelwert von Arten, eine, die wir als Vorbehalts was bedeutet, ist ein Fehler aufgetreten. Also der Preis, den wir zahlen, ist natürlich dass GetInt kann offenbar nicht tatsächlich eine Zahl so groß wie zurück INT_MAX, denn auch wenn es will, Rückgabewert sollte, dass wirklich vom Anrufer interpretiert werden - wer auch immer mit GetInt - als Fehler einiger sortieren. Als nächstes beachte, dass ich schon ein int n und ein char c. In der nächsten Zeile Code, ich nenne ein sscanf-Funktion aufgerufen, vorbei an vier Argumente. Linie, die die Zeichenfolge des Benutzers tippte in "% i% c", das ein Format ist String, den ich erwarte Der Benutzer kann Aktivität, gefolgt von der Adresse n, und die Adresse c. Jetzt sscanf der Sinn im Leben ist in der Tat um eine Zeichenfolge auf der Suche nach dem Scannen bestimmten Format, dass der Programmierer als dieser zweiten Argument angegeben. In diesem Fall ist% i dort, wie ist% c. Also, wenn ein int sscanf trifft in der Eingabe des Benutzers, wird dieser int gespeichert werden innerhalb der Variable n bezeichnet, weil haben wir als dritte bereitgestellt Argument, um die Adresse von n sscanf. Was bedeutet, dass sscanf kann in der Tat gehen dort, und aktualisieren Sie den Wert darin. Nun, im Fall der Benutzer in etwas mehr als eine oder mehrere Ziffern - in anderen Worten, ein Zeichen von einer Art - dass zweite Variable c, deren Adresse wir in sscanf als vierte geben Argument wird auch aufgefüllt werden. Jetzt ist der Kopf der Prüfung für ein zusätzliche Zeichen aus der Benutzer ist dass, wenn er oder sie nicht zusammenarbeiten, und Typen in mehr als nur ein int, wir in der Lage, es in diese zu erkennen Weise, weil in diesem Fall, sscanf wird sich zurück 2, was bedeutet, dass sowohl der Platzhalter gefüllt waren mit Werten. Aber wir hoffen, dass sscanf statt 1 zurückgibt, der nur den Benutzer bedeutet sofern ein int. Was tun wir, wenn sscanf in der Tat gibt 1 zurück? Nun, wir befreien sofort die Zeile, die der Benutzer eingetippt, und dann werden wir n sofort zurück, mit bekommen einen int. Andernfalls, wenn sscanf nicht wieder ein, und der Benutzer daher nicht kooperieren, befreien wir noch die Linie, aber wir der Benutzer jetzt nochmal zu versuchen aufzufordern. Und weil wir immer noch in der, dass Endlosschleife, der Prozess wieder neu zu beginnen, und vielleicht, und vielleicht wieder, bis der Benutzer tatsächlich bietet uns eine int.