>> СПИКЕР 1: Давайте взглянем в библиотеке CS50,
в частности, ее функция GetInt.
Здесь мы имеем фактический источник код GetInt.
И заметьте, что это не слишком долго, и большинство из них представляет какое-то время цикла -
бесконечный цикл при этом - что только возвращает значение, как только мы на самом деле
получили то, что мы ожидали.
Давайте идти через него.
>> Обратите внимание, здесь во-первых, в то время как начинается цикл.
Обратите внимание, в следующем, что у нас есть строки кода что на самом деле вызывает GetString,
и сохраняет возвращаемого значения в переменная, называемая линия, тип строка.
Затем мы делаем немного есть простой тест.
Если линия == NULL, то мы с любопытством вернуться INT_MAX.
>> Теперь оказывается, что INT_MAX является специальная константа объявлена ​​в другом месте
, который определяет максимально возможное Int, что можно представить в
Программа так.
Теперь мы произвольно решил вернуться INT_MAX как значение дозорного из
виды, тот, который мы защищены как это означает, что произошла ошибка.
Таким образом, цена, которую мы платить, конечно, что GetInt видимому, не могут
на самом деле возвращают число такого размера, как INT_MAX, потому что даже если она хочет,
что возвращаемое значение должно действительно интерпретироваться вызывающей -
кто использует GetInt -
как ошибка какой-то.
>> Далее, обратите внимание, что я объявил Int N и символ с.
В этом следующей строке кода, я называю Функция называется Sscanf, передавая
четыре аргумента.
линия, которая является строка пользователя ввели в "% I% С", который является форматом
Строка, я ожидаю пользователь может тип, за которым следует адрес
п, а также адрес в.
Теперь Sscanf'S цель в жизни, действительно для сканирования строку ищете
конкретный формат, что программист уточнил, как этого второго аргумента.
В этом случае,% I находится в там, как% с.
Так что если Sscanf встречает Int в вход пользователя, что внутр будет храниться
внутри переменной называется п, потому что мы обеспечили как третий
Аргумент Sscanf адрес п.
Это означает, что Sscanf действительно может пойти там, и обновить значение в нем.
>> Теперь, в случае пользователь вводит в нечто большее,
чем одна или несколько цифр -
другими словами, символ какой-то -
что вторая переменная с, чей адрес мы прошли в Sscanf как четвертый
аргумент также будет заселена.
Теперь с ног проверок Дополнительный персонаж от пользователя является
что если он или она не будет сотрудничать, и типы в больше, чем просто Int,
мы будем в состоянии обнаружить его в этом образом, поскольку в этом случае, Sscanf
собирается вернуться 2, показывая, что оба заполнителей были заполнены
со значениями.
Но мы надеемся, что Sscanf вместо возвращает 1, что означает, только пользователю
предоставил Int.
>> Что нам делать, если Sscanf действительно возвращает 1?
Ну, мы немедленно освободить линию, пользователь ввел в, и тогда мы
немедленно вернуться п, имеющих получил письмо Int.
В противном случае, если Sscanf не возвращает 1, и пользователь поэтому не сотрудничать,
мы по-прежнему освободить линию, но мы теперь предложит пользователю повторить.
И потому, что мы все еще внутри, что в противном случае бесконечный цикл, процесс
начнется снова, и, возможно, снова, и может быть снова, пока пользователь на самом деле
предоставляет нам Int.