Mitä cin.getline tekee C ++: ssa?


Paras vastaus

cin.getline () antaa sinun kirjoittaa merkkijonon, joka : lla on myös välilyöntejä. Sen syntakse on seuraava: cin.getline (merkkijonon nimi, merkkijonon koko); Harkitse seuraavaa esimerkkiä: Oletetaan, että kirjoitan Hello World sekä str: lle että strr: lle. #include käyttämällä nimiavaruuden vakiota;

int main()

{

char str[100]", strr[100];

cout<<"Enter the strings : ";

cin.getline( str, 100 ); //enter Hello World

cin>>strr; //enter Hello Word.

cout<

cout<

return 0;

}

Tämä on perusero. cin ei ota huomioon merkkijonon tyhjiä välilyöntejä, kun taas cin.getline ottaa huomioon.

Vastaus

Tämä on yksi yleisimmistä ongelmista, joita opiskelijat yleensä kohtaavat käyttäessään getline ()

Kun suoritat ohjelmaa, kirjoitat Delhi ja paina sitten Enter-näppäintä. Tämä enter-avain on vain uuden rivin merkki. Välilyönnit, kuten sarkaintila ja \ n, jätetään yleensä huomiotta (ohitetaan) syötettäessä arvoa cin-toiminnolla.

Tyypillisesti ylimääräisiä merkkejä jätetään syöttövirtaan syötön jälkeen. oletettavasti valmistunut. Ne siirretään sitten seuraavalle syöttöoperaatiolle, vaikka niitä ei ole tarkoitettu sille. Usein se on uuden rivin merkki, joka jää taakse, mutta joskus myös muita merkkejä jää jäljelle.

Ohjelmassa tämä uusi rivin merkki toimii syötteenä getline () -funktiolle. Koska tämä toiminto on saanut syötteen, se ei salli sinun syöttää arvoa. Sinun on päästävä eroon tästä merkistä, ja sitten ohjelmasi toimii täysin hyvin.

Voit päästä eroon näistä vieraista merkeistä Istream-luokan ignore (MAX, DELIM) -funktiota käytetään. Se lukee ja heittää pois enintään MAX merkkiä, mukaan lukien määritetyn erotinmerkin. Käytä tätä toimintoa, ennen kuin soitat getline () -funktiolle:

cin.ignore (1, "\ n");

Koska ylimääräiset merkit voivat sisältää myös välilyönnin (esimerkiksi kirjoittamalla Delhi , syötät tilaa ja painat sitten enter-näppäintä), 1 sijasta olisi turvallisempaa käyttää 10.

cin.ignore (10, "\ n");

Älä huoli istream-luokasta. Se ilmoitetaan IOSTREAM-otsikkotiedostossa. , getline () on myös itse istream-luokan jäsenfunktio.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *