>> SPEAKER 1: Нека да разгледаме в CS50 библиотеката
специално своята GetInt функция.
Тук имаме на източника код за GetInt.
И забележете, че това не е твърде дълъг, и голямата част от него представлява докато контур -
безкраен цикъл, при това - че само връща стойност веднъж всъщност сме
намерила това, което очаквахме.
Да минеш през нея.
>> Забележете, тук на първо място, докато цикъл започва.
Забележете следващия че имаме една линия на код че всъщност призовава GetString,
и съхранява стойността на връщане в променлива, наречена линия, от тип низ.
Ние след това направете малко на една проверка здрав разум.
Ако линията == нула, тогава ние любопитно върнете INT_MAX.
>> Сега се оказва, че INT_MAX е специална постоянна обявен другаде
в който се посочва възможно най-голям INT, че може да представлява в
програма като тази.
Сега сме произволно реши да се върне INT_MAX като часовой стойност на
видове, едно, че сме запазени като което означава, че е възникнала грешка.
Така че цената, която плащаме, разбира се, е че GetInt може очевидно не
всъщност се върне редица по-голям от INT_MAX, защото дори и да иска,
че връщането стойност трябва наистина да се тълкува от повикващия -
който и да е използване GetInt -
като грешка на някакъв вид.
>> На следващо място, забелязваме, че съм обявен едно цяло число N и C Чар.
В следващия ред код, аз наричам функция, наречена sscanf, минаваща през
четири аргумента.
линия, която е низ на потребителя въведена в "% и% в", който е формат
низ, че аз съм в очакване на потребителското мощта тип, последвано от адреса на
п и адреса на в.
Сега целта sscanf в живота е наистина да сканирате низ търси най-
определен формат, че програмистът е посочено, че като втори аргумент.
В този случай,% и е в там, както е в%.
Така че, ако sscanf срещне Int в на вход на потребителя, че Int ще се съхраняват
вътрешността на променлива, наречена N, защото ние сме предвидили като трета
аргумент за sscanf адреса на п.
Което означава, че може наистина да отидат sscanf там, и актуализиране на стойността в него.
>> Сега, в случай, че потребителят в нещо повече
от една или повече цифри -
с други думи, една Чар от някакъв вид -
че втората променлива C, чийто адрес минахме в sscanf като своя четвърти
аргумент също ще бъде населена.
Сега посока нагоре на проверка за допълнителна характер от страна на потребителя е
че ако той или тя не оказва съдействие, и видове в повече от просто едно цяло число,
ние ще бъдем в състояние да го открие в тази начин, защото в този случай, sscanf
ще се върне 2, което означава, че както на контейнерите са пълни
със стойности.
Но ние се надяваме, че вместо sscanf връща 1, което означава, че потребителят само
предостави вътр.
>> Какво ще правим, ако sscanf наистина връща 1?
Е, ние веднага се освободи линията, която потребителят въвели в, и след това ние
незабавно да върне н, като намерила на вътр.
Иначе, ако sscanf не се връща един и следователно потребителят не е оказал съдействие,
ние все още се освободи линията, но ние сега да подтикне потребителя да опита отново.
И тъй като ние все още сме вътре, че друго безкраен цикъл, процесът
ще започне отново, а може би и отново, и може отново, докато потребителят действително
ни дава вътр.