Bezpečný vstup v C ++

Ve vašich programech může být nutné požádat uživatele o informace. V C ++ jsou informace shromažďovány pomocí objektu "cin". Pokud tyto vstupy nezajistíte, program bude pravděpodobně obětí "přetečení vyrovnávací paměti". Pokud počet zadaných znaků překračuje původně plánovanou velikost vyrovnávací paměti, pak poslední data přepisují další data ve svazku a chybná data ovlivňují registry ESP a EBP.

Tyto vstupy dat můžete zabezpečit různými způsoby.

Pomocí metody get ()

 #include int main () {char texte [100]; cin.get (text, 100); // premier paramètre: la où va la saisie druhá: taille max de saisie návrat 0; } 

Tento příklad ilustruje použití cin.get.

Pokud zadaný text přesáhne přidělenou velikost, nadbytečné znaky budou ignorovány.

Metoda "getline ()"

Tato metoda funguje jako get (), ale odstraní znak na konci vyrovnávací paměti.

Pro validaci textu uživatel stiskne klávesu "Enter", která odpovídá znaku ' n '.

getline () odstraní tento znak.

== To nefunguje !! ===

Zde je kód, který nefunguje správně:

 #include using namespace std; int main () {char entree [100]; int choix; cout <> choix; cout << "Entrez un texte:"; cin.get (text, 100); cout << "Saisies terminées!"; návrat 0; } 

Druhá položka se skutečně neprovede a zobrazí se zpráva „Input done! / Saisies terminées!“.

Jak tento problém vyřešit?

Musíte použít metodu " ignore () ".

Metoda ignore ()

Tato metoda umožňuje ignorovat určité znaky v řetězci.

 #include using namespace std; int main () {char entree [100]; int choix; cout <> choix; cout << "Entrez un texte:"; cin.ignore (1, 'n'); // ignore le caractère d'entrée, qui validait auparavant la saisie. cin.get (text, 100); cout << "Saisies terminées!"; návrat 0; 

Tímto způsobem je vstupní znak ignorován a problém vyřešen.

Předchozí Článek Následující Článek

Nejlepší Tipy