Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ read from istream until newline (but not whitespace)

Tags:

c++

iostream

I have a std::istream which refers to matrix data, something like:

0.0 1.0 2.0
3.0 4.0 5.0

Now, in order to assess the number of columns I would like to have some code like:

std::vector<double> vec;
double x;
while( (...something...) && (istream >> x) )
{
    vec.push_back(x); 
}
//Here vec should contain 0.0, 1.0 and 2.0

where the ...something... part evaluates to false after I read 2.0 and istream at the point should be at 3.0 so that the next

istream >> x;

should set x equal to 3.0.

How would you achieve this result? I guess that the while condition

Thank you very much in advance for your help!

like image 377
StephQ Avatar asked Jul 16 '10 08:07

StephQ


People also ask

Does Ifstream ignore whitespace?

The stream extractors behave the same and skip whitespace. If you want to read every byte, you can use the unformatted input functions, like stream.

Does CIN stop at Newline?

cin is whitespace delimited, so any whitespace (including \n ) will be discarded. Thus, c will never be \n .

Does Getline keep newline?

getline(cin, newString); begins immediately reading and collecting characters into newString and continues until a newline character is encountered. The newline character is read but not stored in newString.

How do you enter a new line in C++?

As a programmer, you can use endl or \n to create new line commands in C++.


1 Answers

Use the peek method to check the next character:

while ((istream.peek()!='\n') && (istream>>x))
like image 97
tzaman Avatar answered Sep 19 '22 21:09

tzaman