1 głośnik: Rzućmy okiem w bibliotece CS50, zwłaszcza jego funkcja GetInt. Tutaj mamy rzeczywistego źródła Kod dla GetInt. I zauważyć, że to nie jest zbyt długi, a większość z nich stanowi pętli while - nieskończonej pętli na to - że tylko Zwraca wartość, gdy rzeczywiście mamy zdobyć to, czego oczekiwaliśmy. Przejdźmy przez to. Zauważ tu pierwszy, gdy zaczyna pętlę. Zauważ, że mamy następny wiersz kodu że faktycznie nazywa GetString, i zapisuje zwróconą wartość w Zmienna, zwana linia, typu string. Następnie zrobić trochę o sprawdzenie poprawności. Jeśli linia == null, to ciekawie powrót INT_MAX. Teraz okazuje się, że INT_MAX jest Specjalne stałe zadeklarowane w innym miejscu , który określa największa int, które można reprezentować w Program taki jak ten. Teraz mamy arbitralnie postanowił wrócić INT_MAX jako wartość Stróż rodzaju, który mamy zarezerwowane w co oznacza, że ​​wystąpił błąd. Tak więc cena, jaką płacimy, jest oczywiście że GetInt najwyraźniej nie może faktycznie zwróci liczbę tak duży, jak INT_MAX, bo nawet, jeśli chce, że wartość zwrotna powinna naprawdę być interpretowane przez rozmówcę - kto używa GetInt - jako błąd jakiegoś. Następnie zauważył, że już zadeklarowane int n i char c. W tej kolejnej linii kodu, wzywam Funkcja o nazwie sscanf, przekazując cztery argumenty. Linia, która jest ciągiem użytkownika wpisany w "% i% c", który jest formatem Ciąg, który spodziewam Potęga obsługi typ, a następnie adres n, i adres c. Celem teraz sscanf w życiu jest naprawdę zeskanować ciąg szukasz szczególności format programista został określony jako ten drugi argument. W tym przypadku,% i jest tam, jak to% węgla. Więc jeśli sscanf napotyka w int wejście użytkownika, które będą przechowywane int wewnątrz zmiennej o nazwie n, ponieważ podajemy jako trzeci argument sscanf adres n. Co oznacza, że ​​może rzeczywiście przejść sscanf tam, i zaktualizować wartość w nim. Teraz, w przypadku, gdy użytkownik wpisze w coś więcej od jednego lub większej liczby cyfr - innymi słowy, char jakiegoś - że druga zmienna c, której adres mijaliśmy do sscanf jako jej czwarty Argument będzie również wypełnione. Teraz górą od sprawdzania dodatkowy znak od użytkownika jest że jeśli on lub ona nie współpracować, i typy w więcej niż int, będziemy w stanie wykryć w ten sposób, ponieważ w tym przypadku, sscanf zamierza powrócić 2, co oznacza, że oba były pełne symboli zastępczych z wartościami. Ale mamy nadzieję, że zamiast tego sscanf Zwraca 1, co oznacza tylko użytkownik pod warunkiem, int. Co zrobimy, jeśli sscanf rzeczywiście zwraca 1? Cóż, my natychmiast uwolnić linię użytkownik wpisany, a potem natychmiast powrócić n, o zdobyć int. Indziej, jeśli sscanf nie zwraca 1, a Użytkownik zatem nie współpracował, nadal zwalniać linię, ale teraz poprosi użytkownika, aby ponowić. I dlatego, że jesteśmy w środku, że nadal inaczej pętla nieskończona, proces rozpocznie się ponownie i może ponownie i Może znowu, dopóki użytkownik faktycznie zapewnia nam int.