Saugi įvestis „C ++“

Savo programose gali reikėti paprašyti naudotojo informacijos. C + + informacija renkama naudojant „cin“ objektą. Jei šių įėjimų neužtikrinsite, jūsų programa greičiausiai bus „buferio perpildymo“ auka. Iš tiesų, jei įvestų simbolių skaičius viršija iš pradžių suplanuotą buferio dydį, tada paskutiniai duomenys perrašo kitus krūvos duomenis, o klaidingi duomenys turi įtakos ESP ir EBP registrams.

Šių duomenų įvedimą galite užtikrinti įvairiais būdais.

Naudojant gauti () metodą

 #include int main () {char texte [100]; cin.get (texte, 100); // premier paramètre: la où va la saisie second: uodegos maks. } 

Šis pavyzdys iliustruoja cin.get naudojimą.

Jei įvestas tekstas viršija priskirtą dydį, papildomi simboliai ignoruojami.

Naudojant "getline ()" metodą

Šis metodas veikia kaip gauti (), bet pašalina simbolį buferio pabaigoje.

Iš tiesų, norint patvirtinti tekstą, vartotojas paspaudžia „Enter“ klavišą, kuris atitinka „ n “ ženklą.

getline () pašalina šį simbolį.

== Tai neveikia! ===

Štai kodas, kuris neveikia tinkamai:

 #įtraukti naudojant vardų sritį std; int main () {char entree [100]; int choix; cout <> choix; cout << "Entrez un texte:"; cin.get (texte, 100); cout << "Saisies terminées!"; grąža 0; } 

Iš tiesų, antrasis įrašas nevykdomas, ir pasirodys pranešimas "Įvestas! / Saisies terminées!" ".

Kaip išspręsti šią problemą?

Turite naudoti metodą „ ignoruoti “.

Nepaisyti () metodas

Šis metodas leidžia ignoruoti tam tikrus eilutės simbolius.

 #įtraukti naudojant vardų sritį std; int main () {char entree [100]; int choix; cout <> choix; cout << "Entrez un texte:"; cin.ignore (1, 'n'); // ignoruoti le caractère d'entrée, qui validit auparavant la saisie. cin.get (texte, 100); cout << "Saisies terminées!"; grąža 0; 

Naudojant šį metodą, įvesties simbolis ignoruojamas ir problema išspręsta.

Ankstesnis Straipsnis Kitas Straipsnis

Geriausi Patarimai