Beste antwoord
Hier zul je meer wissen met Cin
Met , cin.get , cin.getline , en cin. negeren
Met behulp van de >> operator (met cin)
De> > operator kan worden gebruikt als u gewoon de volgende niet-blanco-tekens die door de gebruiker zijn ingevoerd in een teken of tekenreeks wilt lezen. Afdrukbare tekens die volgen op de eerste spatie worden genegeerd en worden niet opgeslagen in de variabele. Niet gebruik een statement zoals,
cin >> UserExplanation;
als u bijvoorbeeld wilt om een hele zin van de gebruiker te krijgen die spaties bevat. In dat geval zou je beter bediend kunnen worden door de cin-lidfuncties get of getline te gebruiken .
Vraag : wordt er automatisch een null-terminator opgeslagen aan het einde van de tekenarray, UserExplanation?
cin.get gebruiken
De ongeformatteerde get member-functie werkt als de >> operator met twee uitzonderingen. Ten eerste bevat de get-functie witruimte-tekens , terwijl de extractor witruimte uitsluit wanneer de ios :: skipws-vlag is ingesteld (de standaard). Ten tweede is het minder waarschijnlijk dat de get-functie ervoor zorgt dat een gekoppelde outputstroom (bijvoorbeeld cout) wordt doorgespoeld.
Een variatie op de get-functie specificeert een bufferadres en het maximale aantal te lezen tekens. Dit is handig om het aantal tekens dat naar een specifieke variabele wordt gestuurd te beperken, zoals dit voorbeeld laat zien:
#include
void main()
{
char line[25];
cout << " Type a line terminated by carriage return\n>";
cin.get( line, 25 );
cout << " " << line;
}
In dit voorbeeld kunt u maximaal 24 tekens en een afsluitend teken typen. Eventuele resterende tekens kunnen later worden geëxtraheerd.
Met cin.getline
De getline-ledenfunctie is vergelijkbaar met de krijg functie. Beide functies staan een derde argument toe dat het afsluitende teken voor invoer specificeert. De standaardwaarde is het teken voor een nieuwe regel. Beide functies reserveren één teken voor het vereiste afsluitende teken . get laat echter het afsluitende teken in de stroom staan en getline verwijdert het afsluitende teken.
Het volgende voorbeeld specificeert een afsluitend teken voor de invoer stream:
#include
void main()
{
char line[100];
cout << " Type a line terminated by "t"" << endl;
cin.getline( line, 100, "t" );
cout << line;
}
cin.ignore gebruiken
cin.ignore (int nCount = 1, int delim = EOF);
Parameters
nCount - Het maximale aantal tekens dat moet worden geëxtraheerd. delim - Het scheidingsteken (standaard EOF).
Opmerkingen
Extraheert en verwijdert maximaal nCount-tekens. De extractie stopt als het scheidingsteken wordt geëxtraheerd of als het einde van het bestand wordt bereikt. Als delim = EOF (de standaardinstelling), dan veroorzaakt alleen het einde van het bestand beëindiging. Het scheidingsteken wordt geëxtraheerd.
Answer
cin.ignore () is een vooraf gedefinieerde functie die een of meer tekens uit de invoerbuffer negeert / wist.
Vereisten: 1. De cin behandelt een witruimte, bijvoorbeeld " ", " \ t ", " \ n " als scheidingsteken.
2. Wanneer u iets leest van het standaardinvoerapparaat, toetsenbord hier, gaat het eerst naar de invoerbuffer. De invoerbuffer is een locatie die alle inkomende informatie bevat. gaat door naar de CPU voor verwerking.
Het probleem: 1. Stel dat u een "string" van de gebruiker wilt lezen. char myname [10];
2. Op de een of andere manier gebruik je cin, in plaats van cin.getline () cin >> myname;
3. Ik typ "ABC", en druk vervolgens op de Enter-toets. het neemt ABC op en behandelt het volgende "\ n" als scheidingsteken.Als resultaat wordt "\ n" niet gelezen en blijft het in de invoerbuffer.
4. Dus hier negeert cin.ignore () deze ongelezen tekens die in de invoerbuffer zijn achtergebleven.
De oplossing: als je wilt vermijd situaties, onthoud om geen cin te gebruiken om strings in te voeren. en tada, probleem opgelost !!