De gebruiker wil “Hallo wereld” invoeren. Maar cin
faalt bij de spatie tussen de twee woorden. Hoe kan ik cin
de hele Hello World
laten opnemen?
Ik doe dit eigenlijk met structs en cin.getline
lijkt niet te werken. Hier is mijn code:
struct cd
{
std::string CDTitle[50];
std::string Artist[50];
int number_of_songs[50];
};
std::cin.getline(library.number_of_songs[libNumber], 250);
Dit levert een fout op. Enig idee?
Antwoord 1, autoriteit 100%
Je moet cin.getline()
gebruiken :
char input[100];
cin.getline(input,sizeof(input));
Antwoord 2, autoriteit 93%
Het “mislukt” niet; hij stopt gewoon met lezen. Het ziet een lexicale token als een “string”.
Gebruik std::getline
:
int main()
{
std::string name, title;
std::cout << "Enter your name: ";
std::getline(std::cin, name);
std::cout << "Enter your favourite movie: ";
std::getline(std::cin, title);
std::cout << name << "'s favourite movie is " << title;
}
Merk op dat dit niethetzelfde is als std::istream::getline
, dat werkt met C-stijl char
buffers in plaats van std::string
s.
Bijwerken
Je bewerkte vraag lijkt weinig op het origineel.
Je probeerde getline
in een int
te zetten, geen string of karakterbuffer. De opmaakbewerkingen van streams werken alleen met operator<<
en operator>>
. Gebruik een van beide (en pas dienovereenkomstig aan voor invoer van meerdere woorden), of gebruik getline
en converteer achteraf lexicaal naar int
.
Antwoord 3, autoriteit 47%
De standaardbibliotheek biedt een invoerfunctie met de naam ws
, die witruimte inneemt van een invoerstroom. Je kunt het als volgt gebruiken:
std::string s;
std::getline(std::cin >> std::ws, s);
Antwoord 4, autoriteit 26%
Gebruik:
getline(cin, input);
de functie is te vinden in
#include <string>
Antwoord 5, autoriteit 12%
U wilt de .getline-functie in cin gebruiken.
#include <iostream>
using namespace std;
int main () {
char name[256], title[256];
cout << "Enter your name: ";
cin.getline (name,256);
cout << "Enter your favourite movie: ";
cin.getline (title,256);
cout << name << "'s favourite movie is " << title;
return 0;
}
Neem het voorbeeld van hier. Bekijk het voor meer info en voorbeelden.
Antwoord 6, autoriteit 4%
DE C-MANIER
U kunt de functie gets
gebruiken die u vindt in cstdio(stdio.h in c):
#include<cstdio>
int main(){
char name[256];
gets(name); // for input
puts(name);// for printing
}
DE C++ MANIER
gets
is verwijderd in c++11.
[Aanbevolen]:U kunt getline(cin,name)gebruiken die staat in string.h
of cin.getline(name,256)in iostream
zelf.
#include<iostream>
#include<string>
using namespace std;
int main(){
char name1[256];
string name2;
cin.getline(name1,256); // for input
getline(cin,name2); // for input
cout<<name1<<"\n"<<name2;// for printing
}
Antwoord 7, autoriteit 4%
Hoe lees ik een tekenreeks van invoer?
Je kunt een enkel woord met spaties eindigen met std::cin
als volgt lezen:
#include<iostream>
#include<string>
using namespace std;
int main()
{
cout << "Please enter a word:\n";
string s;
cin>>s;
cout << "You entered " << s << '\n';
}
Houd er rekening mee dat er geen expliciet geheugenbeheer is en geen buffer met een vaste grootte die mogelijk overloopt.
Als je echt een hele regel nodig hebt (en niet slechts een enkel woord), kun je dit doen:
#include<iostream>
#include<string>
using namespace std;
int main()
{
cout << "Please enter a line:\n";
string s;
getline(cin,s);
cout << "You entered " << s << '\n';
}
Antwoord 8, autoriteit 2%
Ik gebruik liever de volgende methode om de invoer te krijgen:
#include <iostream>
#include <string>
using namespace std;
int main(void) {
string name;
cout << "Hello, Input your name please: ";
getline(cin, name);
return 0;
}
Het is eigenlijk supergemakkelijk te gebruiken in plaats van de totale lengte van de array te definiëren voor een string die een spatie bevat.