Beste svaret
Her vil du fjerne mer med Cin
Bruk , cin.get , cin.getline , og cin. ignorere
Bruke operatoren >> (med cin)
The> > -operatøren kan brukes når du bare vil lese de neste tegnene som ikke er tomme tegn, som brukeren skriver inn i et tegn- eller tegnarray. Alle tegn som kan skrives ut som følger det første mellomrommet, ignoreres og lagres ikke i variabelen. bruk en uttalelse som,
cin >> UserExplanation;
hvis du for eksempel vil for å få en hel setning fra brukeren som inkluderer mellomrom. I så fall vil du være bedre tjent med å bruke cin-medlemsfunksjonene get eller getline .
Spørsmål : Vil en null-terminator automatisk bli lagret på slutten av tegnmatrisen, UserExplanation?
Bruke cin.get
Den uformaterte get-medlemsfunksjonen fungerer som >> -operatøren med to unntak. For det første inkluderer get-funksjonen mellomromstegn , mens uttrekkeren ekskluderer hvitt mellomrom når ios :: skipws-flagget er satt (standard). For det andre er det mindre sannsynlig at get-funksjonen fører til at en bundet utgangsstrøm (for eksempel cout) blir spylt.
En variasjon av get-funksjonen spesifiserer en bufferadresse og det maksimale antall tegn å lese. Dette er nyttig for å begrense antall tegn som sendes til en bestemt variabel, da dette eksemplet viser:
#include
void main()
{
char line[25];
cout << " Type a line terminated by carriage return\n>";
cin.get( line, 25 );
cout << " " << line;
}
I dette eksemplet kan du skrive inn opptil 24 tegn og et avsluttende tegn. Eventuelle gjenværende tegn kan trekkes ut senere.
Bruke cin.getline
Getline-medlemsfunksjonen ligner på få funksjon. Begge funksjonene tillater et tredje argument som spesifiserer avslutningstegnet for inndata. Standardverdien er den nye linjetegnet. Begge funksjonene reserverer ett tegn for det nødvendige avsluttende tegnet . Imidlertid etterlater get det avsluttende tegnet i strømmen og getline fjerner det avsluttende tegnet.
Følgende eksempel angir et avslutningstegn for inngangen stream:
#include
void main()
{
char line[100];
cout << " Type a line terminated by "t"" << endl;
cin.getline( line, 100, "t" );
cout << line;
}
Bruke cin.ignore
cin.ignore (int nCount = 1, int delim = EOF);
Parametere
nCount - Maksimalt antall tegn å trekke ut. avgrensning - Avgrensningstegnet (er som standard EOF).
Merknader
Henter ut og forkaster opptil nCount-tegn. Ekstraksjonen stopper hvis skilletegnet trekkes ut eller når slutten av filen er nådd. Hvis avgrensning = EOF (standard), er det bare slutten på filtilstanden som forårsaker avslutning. Avgrensningstegnet er ekstrahert.
Svar
cin.ignore () er en forhåndsdefinert funksjon som ignorerer / sletter ett eller flere tegn fra inngangsbufferen.
Forutsetninger: 1. cin behandler et hvitt mellomrom dvs. " ", " \ t ", " \ n " som skilletegn.
2. Når du leser noe fra standard inngangsenhet, tastatur her, går det først inn i inndatabuffer. Inngangsbufferen er et sted som inneholder all innkommende informasjon før den fortsetter til CPU-en for behandling.
Problemet: 1. Anta at du vil lese en "streng" fra brukeren. char myname [10];
2. Du kommer til å ende opp med å bruke cin, i stedet for cin.getline () cin >> myname;
3. Jeg skriver "ABC", og trykker deretter Enter-tasten. den tar opp ABC og behandler følgende "\ n" som avgrensning.Som et resultat blir ikke "\ n" lest, og den forblir i inndatabuffer.
4. Så her vil cin.ignore () ignorere disse uleste tegnene som var igjen i inndatabufferen.
Løsningen: Hvis du vil unngå situasjoner, bare husk å ikke bruke cin til å angi strenger. og tada, problem løst !!