>> SIARADWR 1: Gadewch i ni yn awr atgyweiria y rhaglen diwethaf.
A'r tro hwn, gadewch i ni ddyrannu yn benodol rhywfaint o cof y mae'r
bydd mewnbwn y defnyddiwr yn cael ei storio.
I wneud hynny, gadewch i ni hogi i mewn ar y cyntaf llinell o cod lle rydym yn datgan s
flaenorol i fod yn seren torgoch.
Y tro hwn, gadewch i ni ail-mynegwch fel a ganlyn -
braced 16 torgoch s, er enghraifft, braced agos.
>> Mewn geiriau eraill, gadewch i ni ddatgan i ni fod yn gyfeiriad cymeriad hwy,
ond yn hytrach amrywiaeth o 16 nod.
Fel hyn, gall y defnyddiwr deipio mewn hyd at 15 cymeriadau ac yn dal i adael lle ar gyfer
yn terminator null.
Gadewch i ni symud ymlaen i Arbed, Llunio, a Run rhaglen hon.
Gwneud scanf2 scanf2 dot slaes.
Gadewch i ni yn awr deipio llinyn fel helo, ac rydym yn diolch am y helo.
>> Yn awr, mae dal i fod yn broblem.
Dim ond teipio helo, sydd ond pum cymeriad, yn ogystal â 1 ar gyfer y null
terminator.
Mae'n ein gadael gyda dim ond angen am chwe bytes.
>> Ond yn anffodus, dim ond ddyrannu 16 i gyd.
Felly, os bydd y defnyddiwr mewn gwirionedd mathau mewn 16 cymeriadau, neu 17, neu sawl cant
cymeriadau, nid ydym yn dal yn mynd i cael digon o le er cof am y
mewnbwn defnyddiwr.
Ac yn wir, mae hyn yn beth sy'n gwneud cael mewnbwn defnyddwyr, felly
anodd yn gyffredinol.
Ac yn wir, dyma pam ein rhoi ar waith y swyddogaeth llinyn get yn y lle cyntaf
yn y llyfrgell CS50 -
at chyfrif i maes sut i drin y rhai sefyllfaoedd lle y mathau o ddefnyddwyr yn
mwy cymeriadau nag yr ydym Rhagwelir yn y lle cyntaf.
>> A dweud y gwir, heb yn gyfan gwbl ailysgrifennu rhaglen hon,
does dim ateb yn lân.
Yn hytrach, yr hyn byddai'n rhaid i ni ei wneud yw cael cymeriad o'r defnyddiwr un ar y
amser, dro ar ôl tro.
Ac ar bob pwynt os ydym yn sylweddoli ein bod yn allan o gof, byddai'n rhaid i ni yn
y pwynt hwnnw yn mynd yn ôl i mewn ac ailddyrannu mwy o gof, copïwch y defnyddiwr
mewnbwn blaenorol gan ein darn cyntaf o gof i mewn i'r newydd,
cyfran fwy o gof.
Ac yna ailadrodd y broses honno eto ac eto nes bod y defnyddiwr yn cael ei wneud yn darparu
ei gyfraniad.