>> ЗВУЧНИК 1: Ајде да ги разгледаме во CS50 библиотека,
односно од неговата GetInt функција.
Тука имаме вистински извор кодот за GetInt.
И ќе забележите дека тоа не е премногу долго, и поголемиот дел од него претставува додека јамка -
бесконечна јамка во тоа - дека само враќа вредност еднаш ние сме всушност
добивано она што го очекуваше.
Ајде да одиме низ него.
>> Забележете тука прво, додека јамка почнува.
Забележите следната дека имаме линија код кои, всушност, ги повикува GetString,
и продавници вратената вредност во променлива, наречен линија, од типот стринг.
Ние тогаш се направи малку здрав разум чек.
Ако линија == NULL, тогаш ние љубопитно врати INT_MAX.
>> Сега излегува дека INT_MAX е специјални постојана прогласи друго место
што го одредува најголем можен int што ќе може да претставуваат во
програма како оваа.
Сега сме произволно одлучи да се врати INT_MAX како стража вредноста на
видови, еден дека ние сме се задржани како значи се случила грешка.
Па цената што плаќаат, се разбира, е дека GetInt може очигледно не
всушност се врати одреден број како голем како INT_MAX, бидејќи дури и ако сака да,
дека враќањето вредност треба навистина да се толкува од страна на повикувачот -
кој е со користење на GetInt -
како грешка на некој вид.
>> Следно, се забележи дека сум прогласена за на int n и знак c.
Во овој следната линија на кодот, јас го нарекувам функција наречена sscanf, минувајќи во
четири аргументи.
линија, која е стринг на корисникот внеле во "% i% c", која е формат
стринг кој јас сум очекуваме на корисникот може да тип, проследено со адреса на
n и адреса на в.
Сега sscanf е цел во животот е навистина за да го скенира низа во потрага за
особено формат, кој на програмерот го специфицира како што вториот аргумент.
Во овој случај,% i е во има, како што е% c.
Па ако sscanf средби int во влез корисникот, кој int ќе се чуваат
внатрешноста на променлива наречена n, бидејќи имаме обезбедени како трет
аргумент за sscanf адресата на n.
Што значи дека sscanf навистина може да оди таму, и надградба на вредноста во него.
>> Сега, во случај корисникот видови во нешто повеќе
од еден или повеќе цифри -
со други зборови, на знак на некој вид -
дека втората променлива в, чија адреса го поминавме во sscanf како четврти
аргумент, исто така, ќе бидат населени.
Сега главата на проверка за дополнителни лик од корисникот
дека ако тој или таа не соработува, и видови во повеќе од само еден int,
ние ќе бидеме во можност да го открие во овој начин, бидејќи во тој случај, sscanf
се случува да се врати 2, означувајќи дека двете променливи беа исполнети
со вредности.
Но, ние се надеваме дека sscanf наместо се враќа 1, што значи дека корисникот само
предвидени Инт.
>> Што ќе правиме ако sscanf навистина се враќа 1?
Па, ние веднаш го ослободи линија која на корисникот внесе во, а потоа ние
веднаш да се врати n, имаат добивано и Инт.
Друго, ако sscanf не се врати 1, и корисникот затоа не соработуваат,
ние се уште се ослободи линија, но ние сега извести корисникот за да се обидете повторно.
И бидејќи ние сме се уште во внатрешноста на тој инаку бесконечна јамка, процесот
ќе започне повторно, а можеби и повторно, и можеби повторно, се додека корисникот всушност
ни дава Инт.