Nejlepší odpověď
Zde s programem Cin více vymažete
Použití , cin.get , cin.getline a cin. ignorovat
Použití operátoru >> (s cin)
The> > operátor lze použít, když chcete jednoduše načíst další znaky neprázdného prostoru zadané uživatelem do znaku nebo pole znaků. Jakékoli tisknutelné znaky, které následují za první mezerou, budou ignorovány a nebudou uloženy v proměnné. použijte příkaz jako
cin >> UserExplanation;
pokud si to například přejete získat od uživatele celou větu, která obsahuje mezery. V takovém případě by vám lépe posloužily členské funkce cin get nebo getline .
Otázka : Bude null-terminátor automaticky uložen na konec pole znaků, UserExplanation?
Používání cin.get
Neformátovaná členská funkce get funguje jako operátor >> se dvěma výjimkami. Nejprve funkce get obsahuje prázdné znaky , zatímco extraktor vylučuje prázdné znaky, když je nastaven příznak ios :: skipws (výchozí). Zadruhé je méně pravděpodobné, že funkce get způsobí vyprázdnění vázaného výstupního proudu (například cout).
Varianta funkce get určuje adresu vyrovnávací paměti a maximální počet znaků ke čtení. To je užitečné pro omezení počtu znaků odeslaných na konkrétní proměnnou, jak ukazuje tento příklad:
#include
void main()
{
char line[25];
cout << " Type a line terminated by carriage return\n>";
cin.get( line, 25 );
cout << " " << line;
}
V tomto příkladu můžete zadat až 24 znaků a koncový znak. Jakékoli zbývající znaky lze extrahovat později.
Použití cin.getline
Členská funkce getline je podobná funkci získat funkci. Obě funkce umožňují třetí argument, který určuje koncový znak pro vstup. Výchozí hodnota je znak nového řádku. Obě funkce rezervují jeden znak pro požadovaný ukončovací znak . Get však ponechá zakončovací znak ve streamu a getline odstraní zakončovací znak.
Následující příklad určuje ukončovací znak pro vstup stream:
#include
void main()
{
char line[100];
cout << " Type a line terminated by "t"" << endl;
cin.getline( line, 100, "t" );
cout << line;
}
Používání cin.ignore
cin.ignore (int nCount = 1, int delim = EOF);
Parametry
nCount - maximální počet znaků k extrahování. delim - Oddělovač (výchozí EOF).
Poznámky
Extrahuje a zahodí až nCount znaků. Extrakce se zastaví, pokud je extrahován oddělovač nebo je dosaženo konce souboru. Pokud delim = EOF (výchozí), pak ukončení způsobí pouze podmínka konce souboru. Znak oddělovače je extrahován.
Odpověď
cin.ignore () je předdefinovaná funkce, která ignoruje / vymaže jeden nebo více znaků ze vstupní vyrovnávací paměti.
Předpoklady: 1. cin zachází s mezerou, tj. " ", " \ t ", " \ n „ jako oddělovač.
2. Když zde načtete cokoli ze standardního vstupního zařízení, klávesnice, nejdříve jde do vstupní vyrovnávací paměti. Vstupní vyrovnávací paměť je umístění, které obsahuje všechny příchozí informace před pokračuje na CPU ke zpracování.
Problém: 1. Předpokládejme, že chcete číst "řetězec" od uživatele. char myname [10];
2. Nakonec místo cin.getline () cin >> myname;
3 použijete cin. Napíšu „ABC“ a stisknu klávesu Enter. zabírá ABC a považuje následující "\ n" za delimetr.Výsledkem je, že „\ n“ se nepřečte a zůstane ve vstupní vyrovnávací paměti.
4. Zde tedy cin.ignore () ignoruje tyto nepřečtené znaky, které zůstaly ve vstupní vyrovnávací paměti.
Řešení: Pokud chcete vyhýbejte se situacím, mějte na paměti nepoužívat cin k zadávání řetězců. a tada, problém vyřešen !!