>> GARSIAKALBIS 1: Leiskite dabar nustatyti kad praėjusiais programa.
Ir šį kartą, galime aiškiai paskirstyti kai atmintis, kurioje
vartotojo įvestis bus saugomi.
Norėdami tai padaryti, tegul galąstuvas, kad pirmasis linijos kodas, kai mes paskelbėme s
anksčiau, kad char žvaigždė.
Šį kartą, tegul iš naujo deklaruoti tai taip -
char ai laikiklis 16, pavyzdžiui, skliaustai uždaromi.
>> Kitaip tariant, galime paskelbti s iki ne nebegali būti iš charakterio adresas,
o iš 16 simbolių masyvas.
Tokiu būdu, vartotojas gali įvesti iki 15 ženklai ir vis dar palieka erdvės
null terminatorius.
Leiskite pradėti taupyti, kaupti, ir paleisti šią programą.
Padaryti scanf2 taškas velniop scanf2.
Leiskite dabar įrašykite eilutę kaip labas, ir mes padėkojo už labas.
>> Dabar, dar problema.
Aš tik įvedėte hello, kuri yra tik penki simboliai, plius 1 už null
terminatorius.
Jis palieka mums tik šešių baitų poreikis.
>> Bet, deja, mes tik skiriama 16 iš viso.
Taigi, jei vartotojas iš tikrųjų rūšys 16 ženklai, arba 17, arba keli šimtai
ženklai, mes vis dar nesiruošia turite pakankamai vietos atminties
vartotojo įvesties.
Ir iš tiesų, tai ką daro gauti vartotojo įvesties taip
sunku apskritai.
Ir iš tiesų, tai kodėl mes įdiegėme GET eilutė funkcija pirmas
vieta CS50 bibliotekoje -
išsiaiškinti, kaip elgtis tiems, situacijų, kai vartotojas įveda į
daugiau simbolių, nei mes buvo manyta iš pradžių.
>> Tiesą sakant, be galo perrašyti šią programą,
nėra švarus tirpalas.
Atvirkščiai, tai, ką mes turime padaryti, tai gauti nuo vartotojo koks simbolis
laikas, vėl ir vėl.
Ir kiekviename taške, jei mes suprantame, kad mes iš atminties, mes turėtume ne
kad taškas grįžti ir perskirstyti šiek tiek daugiau atminties, kopijuoti vartotojo
ankstesnė įvesties iš mūsų pirmą riekė atminties į naujas,
didesnė riekė atmintyje.
Ir tada pakartokite šį procesą vėl ir tol, kol vartotojas yra padaryta teikiant
jo arba jos įėjimo.