BeepBoop
BeepBoop

Reputation: 261

can't get file to output correctly

i am writing this very simple program that ouputes hello world using files. keep in mind i want the hello and world to be on separate lines.

here is the following code:

    int main()
    {


        std::ofstream someFile("file.dat");
        someFile << "" << std::endl;

        std::fstream someOtherFile("file.dat",ios::in | ios::out);

        std::string content;

        someOtherFile << "hello" << std::endl;
        someOtherFile << "world" << std::endl;
        someOtherFile.seekg(0, ios::beg);
        std::getline(someOtherFile, content);
        std::cout << content << std::endl;
        return 0;


       }

however, whenever i run the following program, it only prints "hello".

any help will be greatly appreciated, and PLEASE give an example using fstream, not ofstream or ifstream (I am trying to learn how fstream works, however am finding a little trouble).

my compiler is the latest VS.

Upvotes: 0

Views: 75

Answers (5)

JerryYoung
JerryYoung

Reputation: 277

getine function only read one line per one time, so you should call getline until the end of file. The code be below can help you.

#include <iostream>
#include <fstream>`
#include <string>
using namespace std;
int main()
{


	std::ofstream someFile("file.dat");
	someFile << "" << std::endl;

	std::fstream someOtherFile("file.dat",ios::in | ios::out);

	std::string content;

	someOtherFile << "hello" << std::endl;
	someOtherFile << "world" << std::endl;
	someOtherFile.seekg(0, ios::beg);
	while(std::getline(someOtherFile, content))
	{

		std::cout << content << std::endl;
	}
	
	return 0;
}

Upvotes: 1

Donald
Donald

Reputation: 641

You have 2 lines of code:

someOtherFile << "hello" << std::endl;
someOtherFile << "world" << std::endl;

They put 2 lines of strings into file.dat:

// file.dat
hello
world

The function "getline()" gets only 1 line from the file. And the "seekg" function sets the read position to the first line of the file: which contains "hello".

If you want to read to the end of the file: then replace:

std::getline(someOtherFile, content);
std::cout << content << std::endl;

with:

while (!someOtherFile.eof())
{
    std::getline(someOtherFile, content);
    std::cout << content << std::endl;
}

Or use a counter variable if you just want specific lines.

By the way, I am just assuming that you meant to put the variable "content" where "name" is.

Upvotes: 1

Bhavesh Kumar
Bhavesh Kumar

Reputation: 116

#include<fstream>
#include<iostream>

using namespace std;

  int main()
    {


        std::ofstream someFile("file.dat");
        someFile << "" << std::endl;

        someFile.close();

        std::fstream someOtherFile("file.dat",ios::in | ios::out);

        std::string content;

        someOtherFile << "hello ";
        someOtherFile << "world" << std::endl;
        someOtherFile.close();

        someOtherFile.seekg(0, ios::beg);
        std::getline(someFile1, content);
        std::cout << content << std::endl;

        someFile1.close();
        return 0;


       }

This will print your desired answer

Upvotes: 0

Satish Chalasani
Satish Chalasani

Reputation: 167

Add another getline(..) and cout statement after the first set of getline and cout. you will get the world as output.

someOtherFile << "hello" << std::endl;
        someOtherFile << "world" << std::endl;
        someOtherFile.seekg(0, ios::beg);
        std::getline(someOtherFile, content);
        std::cout << content << std::endl;
std::getline(someOtherFile, content);
        std::cout << content << std::endl;

getline gets only one line in a file. To get next line, you need to call again.

Upvotes: 0

Juny
Juny

Reputation: 51

std::getline only get one line of text from the specific file. As http://www.cplusplus.com/reference/string/string/getline/?kw=getline says:

istream& getline (istream& is, string& str);

Extracts characters from is and stores them into str until the delimitation character delim is found (or the newline character, '\n', for (2)).

Upvotes: 0

Related Questions