web-dev-qa-db-fra.com

std :: cin entrée avec des espaces?

#include <string>

std::string input;
std::cin >> input;

L'utilisateur veut entrer "Hello World". Mais cin ne parvient pas à l'espace entre les deux mots. Comment faire en sorte que cin prenne tout le contenu de Hello World?

En fait, je le fais avec structs et cin.getline ne semble pas fonctionner. Voici mon 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);

Cela génère une erreur. Des idées?

124
dukevin

Vous devez utiliser cin.getline() :

char input[100];
cin.getline(input,sizeof(input));
91
Pete

Cela ne "échoue" pas; ça arrête juste de lire. Il voit un jeton lexical comme une "chaîne".

Utilisez 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;
}
_

Notez que ceci est pas identique à _std::istream::getline_, qui fonctionne avec les tampons de style C char plutôt que _std::string_ s.

Mettre à jour

Votre question modifiée a peu de ressemblance avec l'original.

Vous essayiez de getline dans un int, pas une chaîne ni un tampon de caractères. Les opérations de formatage des flux ne fonctionnent qu'avec _operator<<_ et _operator>>_. Utilisez l’un d’eux (et ajustez-le en conséquence pour une saisie de plusieurs mots) ou utilisez getline et convertissez-lexicalement en int après coup.

186

Utilisation :

getline(cin, input);

la fonction peut être trouvée dans

#include <string>
24
Gautham Vinod

La bibliothèque standard fournit une fonction d'entrée appelée ws, qui consomme des espaces à partir d'un flux d'entrée. Vous pouvez l'utiliser comme ceci:

std::string s;
std::getline(std::cin >> std::ws, s);
19
dev gr

Vous voulez utiliser la fonction .getline dans cin.

#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;
}

Pris l'exemple de ici . Découvrez-le pour plus d'informations et d'exemples.

12
Cody

THE C WAY

Vous pouvez utiliser la fonction gets trouvée dans cstdio (stdio.h en c):

#include<cstdio>
int main(){

char name[256];
gets(name); // for input
puts(name);// for printing 
}

C++

gets est supprimé de c ++ 11.

[Recommandé]: vous pouvez utiliser getline (cin, nom) qui est dans string.h ou cin.getline (nom, 256) qui est dans iostream lui-même.

#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
}
4
abe312