std::cin invoer met spaties?

De gebruiker wil “Hallo wereld” invoeren. Maar cinfaalt bij de spatie tussen de twee woorden. Hoe kan ik cinde hele Hello Worldlaten opnemen?

Ik doe dit eigenlijk met structs en cin.getlinelijkt 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 charbuffers in plaats van std::strings.

Bijwerken

Je bewerkte vraag lijkt weinig op het origineel.

Je probeerde getlinein een intte 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 getlineen 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 getsgebruiken 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

getsis verwijderd in c++11.

[Aanbevolen]:U kunt getline(cin,name)gebruiken die staat in string.h
of cin.getline(name,256)in iostreamzelf.

#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::cinals 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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes