Bästa svaret
Här kommer du att rensa mer med Cin
Användning , cin.get , cin.getline och cin. ignorera
Använda >> -operatören (med cin)
The> > -operatören kan användas när du helt enkelt vill läsa nästa tecken som inte skrivs in av användaren i ett tecken- eller teckenarray. Alla utskrivbara tecken som följer det första mellanslaget ignoreras och kommer inte att sparas i variabeln. använd ett uttalande som,
cin >> UserExplanation;
om du till exempel vill för att få en hel mening från användaren som innehåller mellanslag. I så fall skulle du tjäna bättre genom att använda cin-medlemsfunktionerna get eller getline .
Fråga : Kommer en null-terminator automatiskt att lagras i slutet av teckenuppsättningen, UserExplanation?
Använda cin.get
Funktionen omformaterad get-medlem fungerar som >> -operatören med två undantag. Först inkluderar get-funktionen vita blankstegstecken , medan extraheraren utesluter det vita utrymmet när ios :: skipws-flaggan är inställd (standard). För det andra är det mindre troligt att get-funktionen orsakar att en bunden utgångsström (till exempel cout) spolas.
En variation av get-funktionen anger en buffertadress och det maximala antalet tecken som ska läsas. Detta är användbart för att begränsa antalet tecken som skickas till en specifik variabel, eftersom detta exempel visar:
#include
void main()
{
char line[25];
cout << " Type a line terminated by carriage return\n>";
cin.get( line, 25 );
cout << " " << line;
}
I det här exemplet kan du skriva upp till 24 tecken och ett avslutande tecken. Alla återstående tecken kan extraheras senare.
Använda cin.getline
Getline-medlemsfunktionen liknar få funktion. Båda funktionerna tillåter ett tredje argument som anger avslutande tecken för inmatning. Standardvärdet är den nya linjetecknet. Båda funktionerna reserverar ett tecken för det önskade avslutande tecknet . Men get lämnar det avslutande tecknet i strömmen och getline tar bort det avslutande tecknet.
Följande exempel anger ett avslutande tecken för ingången ström:
#include
void main()
{
char line[100];
cout << " Type a line terminated by "t"" << endl;
cin.getline( line, 100, "t" );
cout << line;
}
Använda cin.ignore
cin.ignore (int nCount = 1, int delim = EOF);
Parametrar
nCount - Det maximala antalet tecken som ska extraheras. avgränsning - Avgränsningstecken (standardvärde för EOF).
Anmärkningar
Extraherar och kastar upp till nCount-tecken. Extraheringen stoppas om avgränsaren avgränsas eller filens slut nås. Om avgränsning = EOF (standard) orsakar endast slutet av filtillståndet avslutning. Avgränsningstecknet extraheras.
Svar
cin.ignore () är en fördefinierad funktion som ignorerar / rensar ett eller flera tecken från ingångsbufferten.
Förutsättningar: 1. cin behandlar ett vitt utrymme, dvs. " ", " \ t ", " \ n " som avgränsningstecken.
2. När du läser något från standardinmatningsenheten, tangentbordet här, går det först in i inmatningsbuffert. Inmatningsbufferten är en plats som innehåller all inkommande information innan den fortsätter till processorn för bearbetning.
Problemet: 1. Antag att du vill läsa en "sträng" från användaren. char myname [10];
2. Du hamnar på något sätt med cin istället för cin.getline () cin >> mittnamn;
3. Jag skriver "ABC" och trycker sedan på Enter. det tar upp ABC och behandlar följande "\ n" som avgränsare.Som ett resultat läses "\ n" inte och det finns kvar i inmatningsbuffert.
4. Så här kommer cin.ignore () att ignorera dessa olästa tecken som finns kvar i inmatningsbufferten.
Lösningen: Om du vill undvik situationer, kom bara ihåg att inte använda cin för att ange strängar. och tada, problemlöst !!