#include <string> std::string input; std::cin >> input; 

The user wants to enter "Hello World". But cin fails at the space between the two words. How can I make cin take in the whole of Hello World?

I'm actually doing this with structs and cin.getline doesn't seem to work. Here's my 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); 

This yields an error. Any ideas?

5

8 Answers

It doesn't "fail"; it just stops reading. It sees a lexical token as a "string".

Use std::getline:

#include <string> #include <iostream> 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; } 

Note that this is not the same as std::istream::getline, which works with C-style char buffers rather than std::strings.

Update

Your edited question bears little resemblance to the original.

You were trying to getline into an int, not a string or character buffer. The formatting operations of streams only work with operator<< and operator>>. Either use one of them (and tweak accordingly for multi-word input), or use getline and lexically convert to int after-the-fact.

6

You have to use cin.getline():

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

The Standard Library provides an input function called ws, which consumes whitespace from an input stream. You can use it like this:

std::string s; std::getline(std::cin >> std::ws, s); 
3

Use :

getline(cin, input); 

the function can be found in

#include <string> 
4

You want to use the .getline function in 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; } 

Took the example from here. Check it out for more info and examples.

7

THE C WAY

You can use gets function found in cstdio(stdio.h in c):

#include<cstdio> int main(){ char name[256]; gets(name); // for input puts(name);// for printing } 

THE C++ WAY

gets is removed in c++11.

[Recommended]:You can use getline(cin,name) which is in string.h or cin.getline(name,256) which is in iostream itself.

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

How do I read a string from input?

You can read a single, whitespace terminated word with std::cin like this:

#include<iostream> #include<string> using namespace std; int main() { cout << "Please enter a word:\n"; string s; cin>>s; cout << "You entered " << s << '\n'; } 

Note that there is no explicit memory management and no fixed-sized buffer that you could possibly overflow. If you really need a whole line (and not just a single word) you can do this:

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

I rather use the following method to get the input:

#include <iostream> #include <string> using namespace std; int main(void) { string name; cout << "Hello, Input your name please: "; getline(cin, name); return 0; } 

It's actually super easy to use rather than defining the total length of array for a string which contains a space character.