By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,231 Members | 1,701 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,231 IT Pros & Developers. It's quick & easy.

stream problem

P: n/a
Hello,

I'm wondering why this outputs garbage:

std::ofstream outFile("test.txt");

outFile << 1.0f << std::endl;
outFile << filename << std::endl;
outFile << 2.0f << std::endl;
std::string s;
float x;
std::ifstream inFile("test.txt");
inFile >> x;
std::cout << x << std::endl;
std::getline(inFile, s, '\n');
std::cout << s << std::endl;
inFile >> x;
std::cout << x << std::endl;

and why this works:

outFile << filename << std::endl;
outFile << 1.0f << std::endl;
outFile << 2.0f << std::endl;
std::string s;
float x;
std::ifstream inFile("test.txt");
std::getline(inFile, s, '\n');
std::cout << s << std::endl;
inFile >> x;
std::cout << x << std::endl;
inFile >> x;
std::cout << x << std::endl;

I think the former doesn't work because the getline() is reading the same
line as the previous inFile >> read. How can I get it to skip to the next
line, if that is indeed the problem.
Jul 19 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a

"vsgdp" <no****@nospam.com> wrote in message
news:LMr2b.10463$Qy4.4180@fed1read05...
Hello,

I'm wondering why this outputs garbage:

std::ofstream outFile("test.txt");

outFile << 1.0f << std::endl;
outFile << filename << std::endl;
outFile << 2.0f << std::endl;
std::string s;
float x;
std::ifstream inFile("test.txt");
inFile >> x;
std::cout << x << std::endl;
std::getline(inFile, s, '\n');
std::cout << s << std::endl;
inFile >> x;
std::cout << x << std::endl;

and why this works:

outFile << filename << std::endl;
outFile << 1.0f << std::endl;
outFile << 2.0f << std::endl;
std::string s;
float x;
std::ifstream inFile("test.txt");
std::getline(inFile, s, '\n');
std::cout << s << std::endl;
inFile >> x;
std::cout << x << std::endl;
inFile >> x;
std::cout << x << std::endl;

I think the former doesn't work because the getline() is reading the same
line as the previous inFile >> read.
Not quite.

getline is doing what it is supposed to which is reading up to the next
newline. Your mistake is thinking that inFile >> x will read a newline, but
it doesn't. inFile >> x reads a number and a newline is not part of a
number. So when you have a number followed by a newline the newline is left
behind unread. Then getline comes along and reads it.
How can I get it to skip to the next
line, if that is indeed the problem.


Use getline twice?

john
Jul 19 '05 #2

P: n/a

"John Harrison" <jo*************@hotmail.com> wrote in message news:bi************@ID-196037.news.uni-
How can I get it to skip to the next
line, if that is indeed the problem.


Use getline twice?

or ignore.
Jul 19 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.