Paras vastaus
Täällä tyhjennät lisää Cinillä
Käyttämällä , cin.get , cin.getline ja cin. ohita
>> -operaattorin (cin) käyttö
The> > -operaattoria voidaan käyttää, kun haluat yksinkertaisesti lukea seuraavat käyttäjän kirjoittamat muut tyhjät tyhjät merkit merkiksi tai merkistöön. Ensimmäistä välilyöntiä seuraavat tulostettavat merkit jätetään huomioimatta eikä niitä tallenneta muuttujaan. Älä käytä lauseketta, kuten
cin >> UserExplanation;
jos esimerkiksi haluat saada koko lause, joka sisältää käyttäjän välilyönnit. Siinä tapauksessa sinun olisi parempi palvella cin-jäsenfunktioita get tai getline .
Kysymys : Tallennetaanko nolla-terminaattori automaattisesti UserExplanation-merkistöryhmän loppuun?
cin.get-sovelluksen käyttäminen
Muotoilematon saada jäsen -funktio toimii kuten >> -operaattori kahdella poikkeuksella. Ensinnäkin get -toiminto sisältää välilyöntejä , kun taas erotin sulkee pois välilyönnin, kun ios :: skipws-lippu on asetettu (oletus). Toiseksi get-funktio ei todennäköisesti aiheuta sidotun ulostulovirran (esimerkiksi cout) huuhtelua.
Get-funktion muunnelma määrittää puskuriosoitteen ja luettavien merkkien enimmäismäärän. Tästä on hyötyä rajoitettaessa tiettyyn muuttujaan lähetettyjen merkkien määrää, kuten tämä esimerkki osoittaa:
#include
void main()
{
char line[25];
cout << " Type a line terminated by carriage return\n>";
cin.get( line, 25 );
cout << " " << line;
}
Tässä esimerkissä voit kirjoittaa enintään 24 merkkiä ja päättävän merkin. Kaikki jäljellä olevat merkit voidaan purkaa myöhemmin.
cin.getline-toiminnon käyttäminen
Getline-jäsenfunktio on samanlainen kuin saada toiminto. Molemmat toiminnot sallivat kolmannen argumentin, joka määrittää syötteen päättävän merkin. Oletusarvo on uuden rivin merkki. Molemmat toiminnot varaavat yhden merkin vaaditulle loppumerkille . get kuitenkin jättää lopettavan merkin streamiin ja getline poistaa lopetettavan merkin.
Seuraava esimerkki määrittää syötteelle päättävän merkin stream:
#include
void main()
{
char line[100];
cout << " Type a line terminated by "t"" << endl;
cin.getline( line, 100, "t" );
cout << line;
}
cin.ignore-sovelluksen käyttäminen
cin.ignore (int nCount = 1, int delim = EOF);
Parametrit
nCount - Poimittavien merkkien enimmäismäärä. delim - erotinmerkki (oletuksena EOF).
Huomautuksia
Poimii ja hylkää enintään nCount merkkejä. Pura pysähtyy, jos erotinmerkki erotetaan tai tiedoston loppu on saavutettu. Jos delim = EOF (oletus), vain tiedoston ehdon loppu aiheuttaa päättymisen. Erotinmerkki puretaan.
Vastaus
cin.ignore () on ennalta määritetty funktio, joka ohittaa / tyhjentää yhden tai useamman merkin syöttöpuskurista.
Edellytykset: 1. -säädin käsittelee tyhjää tilaa eli " ", " \ t ", " \ n " erotinmerkkinä.
2. Kun luet jotain tavallisesta syöttölaitteesta, näppäimistöstä, se siirtyy ensin -tulopuskuriin. Syöttöpuskuri on paikka, joka pitää kaikki saapuvat tiedot ennen sitä jatkuu prosessoriin käsittelyä varten.
Ongelma: 1. Oletetaan, että haluat lukea "merkkijonon" käyttäjältä. merkinimi [10];
2. Jotenkin päädyt käyttämään ciniä cin.getline () cin >> myname;
3 sijaan. Kirjoitan "ABC" ja paina sitten Enter-näppäintä. se vie ABC: n ja käsittelee seuraavaa "\ n" erottimena.Tämän seurauksena "\ n" ei lueta ja se pysyy -tulopuskurissa.
4. Joten tässä cin.ignore () jättää huomiotta nämä lukemattomat merkit, jotka jäivät syöttöpuskuriin.
Ratkaisu: Jos haluat vältä tilanteita, muista vain , ettet käytä ciniä merkkijonojen kirjoittamiseen. ja tada, ongelma ratkaistu !!