Ik heb een probleem bij het gebruik van de getline-methode om een bericht te krijgen dat de gebruiker typt, ik gebruik zoiets als:
string messageVar;
cout << "Type your message: ";
getline(cin, messageVar);
Het stopt echter niet om de uitvoerwaarde te krijgen, wat is hier mis mee?
Antwoord 1, autoriteit 100%
Als u getline()
gebruikt na cin >> something
, moet je het teken van de nieuwe regel uit de buffer ertussen spoelen. U kunt dit doen door cin.ignore()
te gebruiken.
Het zou ongeveer zo zijn:
string messageVar;
cout << "Type your message: ";
cin.ignore();
getline(cin, messageVar);
Dit gebeurt omdat de operator >>
een teken voor een nieuwe regel \n
in de invoerbuffer achterlaat. Dit kan een probleem worden als je ongeformatteerde invoer doet, zoals getline()
, die invoer leest totdat een nieuwe regel wordt gevonden. Als dit gebeurt, stopt het onmiddellijk met lezen, vanwege die \n
die daar bleef hangen tijdens uw vorige bewerking.
Antwoord 2, autoriteit 6%
Als je maar één nieuwe regel in de invoer hebt, gewoon doen
std::cin.ignore();
zal prima werken. Het leest en verwijdert het volgende teken van de invoer.
Maar als u naast de nieuwe regel nog iets anders in de invoer heeft (u leest bijvoorbeeld één woord maar de gebruiker heeft twee woorden ingevoerd), dan moet u dat doen
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Zie bijv. deze verwijzing naar de functie ignore
.
Om nog veiliger te zijn, voert u het tweede alternatief hierboven in een lus uit tot gcount
geeft nul terug.
Antwoord 3, autoriteit 4%
Ik had soortgelijke problemen. Het enige nadeel is dat je met cin.ignore()
nog 1 keer op enter moet drukken, wat het programma verstoort.
Antwoord 4, autoriteit 2%
int main(){
.... example with file
//input is a file
if(input.is_open()){
cin.ignore(1,'\n'); //it ignores everything after new line
cin.getline(buffer,255); // save it in buffer
input<<buffer; //save it in input(it's a file)
input.close();
}
}
Antwoord 5
Ik weet dat ik laat ben, maar ik hoop dat dit nuttig is.
Logica is voor het nemen van één regel tegelijk als de gebruiker veel regels wil invoeren
int main()
{
int t; // no of lines user wants to enter
cin>>t;
string str;
cin.ignore(); // for clearing newline in cin
while(t--)
{
getline(cin,str); // accepting one line, getline is teminated when newline is found
cout<<str<<endl;
}
return 0;
}
invoer:
3
Overheidscollage Berhampore
Serampore textielcollage
Berhampore Serampore
uitvoer:
Overheidscollage Berhampore
Serampore textielcollage
Berhampore Serampore
Antwoord 6
Ik denk dat je het programma niet pauzeert voordat het eindigde, dus de uitvoer die je doet nadat je de inpus hebt gekregen, ziet niet op het scherm rechts?
DOEN:
getchar();
Vóór het einde van het programma
Antwoord 7
De code is correct. Het probleem moet ergens anders liggen. Probeer het minimalistische voorbeeld van de Documentatie van de STD :: Getline.
main ()
{
std::string name;
std::cout << "Please, enter your full name: ";
std::getline (std::cin,name);
std::cout << "Hello, " << name << "!\n";
return 0;
}