I've been having a lot of problems with fstream lately..
for my class theres this source code that won't compile... i was hoping someone could help me shed some light...

Code:
#include<iostream>
#include<fstream>
using namespace std;

void adding(fstream & f, int & counter)
{
	char name[51];
	long l = f.tellp() / 50; // find out how many records are in the file (Each I record consumes 50 bytes.)
	cout << "There are " << l << " records in the file." << endl;
	cout << "Enter a name ";
	cin.getline(name, 50);
	f.seekp(counter * 50); // move the pointer to the last position.
	f.write(name, 50); // write 50 bytes to the file.
	counter++; // increase the counter.
}

void displaying(fstream & f)
{
	int r=0;
	char name[51];
	cout << "Which record do you want to read ?";
	cin >> r;
	cin.ignore(200, '\n');
	f.seekg(--r * 50); // locate the pointer for the read() function.
	f.read(name, 50); // read 50 bytes from the file and store it into 'name'
	cout << "The name is " << name << endl;
}


void changing(fstream & f)
{
	int r=0;
	char name[51];
	cout << "Which record do you want to change ?";
	cin >> r;
	cin.ignore(200, '\n');
	cout << "Enter a name ";
	cin.getline(name, 50);
	f.seekp(--r * 50);
	f.write(name, 50);
}


int main()
{ // open a binary file for both input and output.
	fstream f("Test.bin", ios::in | ios::out | ios::binary);
	int i=0;
	int counter=0;
	if(f) { // the file can open.
		while(i != 4) {
		cout << "1 for adding records " << endl;
		cout << "2 for displaying records " << endl;
		cout << "3 for changing records " << endl;
		cout << "4 for quitting the program" << endl;
		cin >> i;
		cin.ignore(200, '\n');
		if(i==1)
  	  	  	adding(f, counter);
		else if(i==2)
			displaying(f);
		else if(i==3)
			changing(f);
		}
	}
	else
		cout << "failed" << endl;
	f.close(); // close the file associated with "f"
	return 0;
}
all i get in the console window is

Code:
failed
press any key to continue .....
please let me know why this is happening..
also as a side note. while learning fstream i have had many failed attempts in opening an fstream with both ' ios::in and ios:ut '.. perhaps there's a relationship between them. or i just dont know my fstream well enough..

thanks