Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ "cin" only reads the first word [duplicate]

Tags:

c++

string

#include<iostream.h>
#include<conio.h>
class String
{
    char str[100];
    public:
    void input()
    {
        cout<<"Enter string :";
        cin>>str;
    }

    void display()
    {
        cout<<str;
    }
};

int main()
{
     String s;
     s.input();
     s.display();
     return 0;
}

I am working in Turbo C++ 4.5. The code is running fine but its not giving the desired output for e.g if i give input as "steve hawking" only "steve" is being displayed. Can anyone please help?

like image 236
rick Avatar asked Feb 27 '12 17:02

rick


3 Answers

Using >> on a stream reads one word at a time. To read a whole line into a char array:

cin.getline(str, sizeof str);

Of course, once you've learnt how to implement a string, you should use std::string and read it as

getline(cin, str);

It would also be a very good idea to get a compiler from this century; yours is over 15 years old, and C++ has changed significantly since then. Visual Studio Express is a good choice if you want a free compiler for Windows; other compilers are available.

like image 176
Mike Seymour Avatar answered Nov 20 '22 18:11

Mike Seymour


cin>>str;

This only reads in the next token. In C++ iostreams, tokens are separated by whitespace, so you get the first word.

You probably want getline, which reads an entire line into a string:

getline(cin, str);
like image 4
Brendan Long Avatar answered Nov 20 '22 18:11

Brendan Long


You can use :

   cin.read( str, sizeof(str) );

But, this will fill up the buffer. Instead you should use cin.getLine() as MikeSeymour suggested

like image 2
roymustang86 Avatar answered Nov 20 '22 17:11

roymustang86