user3150762
user3150762

Reputation: 57

Streaming I/O in c++

I am trying to get this file stream program to work but when I run it all that happens is it outputs "Writing" instead of outputting the file. What am i doing wrong?

#include "stdafx.h"
#include <fstream>
#include <iostream>

using namespace std;

int main()
{
  char str[10];
  ifstream b_file ( "ioTest.txt" );
  b_file>> str;
  cout<< str <<"\n";
  cin.get(); 

}

Upvotes: 0

Views: 72

Answers (1)

David G
David G

Reputation: 96845

The standard input streams use whitespace as a delimiter for input. If you try extracting to a string, it will extract every character until a whitespace character is found. If you need the entire content of the file, here are a few options:

while (in >> word)

while (b_file >> word)
{
    std::cout << word;
}

This method will iterate over each whitespace-separated tokens in the input stream.

std::getline()

while (std::getline(b_file, line))
{
    std::cout << line;
}

std::getline() retrieves line-wise input, meaning it will extract every character until it reaches a delimiter. The delimiter by default is the newline but it can be specified as a third argument.


std::istream_iterator<T>

std::copy(std::istream_iterator<std::string>(b_file),
          std::istream_iterator<std::string>(),
          std::ostream_iterator<std::string>(std::cout, "\n"));

std::istream_iterator is a special-purpose stream iterator class designed to "iterate" over tokens of type T from an input stream.

rdbuf()

std::cout << b_file.rdbuf();

This is more low-level. An overload of std::ostream::operator<<() takes a stream buffer pointer as an argument, and it will extract characters directly from the buffer.

Upvotes: 3

Related Questions