Hi, I am new to c++ (and programming in general) and have a problem with a small project that I am doing to aid my research. I run multiple Polymerase Chain Reactions to amplify specific sections of DNA from pathogenic bacteria. Anyway, to take some of the pain out of setting these up, I read up a bit and wrote a small c++ programme to calculate the volumes I need for single and multiple PCR reactions. The programme works fine but I would like to add the ability to save the output from my programme to a file. Specifically I would like the programme to invoke the user to name an output file and then for the programme to write to that file and to close the file. I have tried using examples of file io from this site and others but i do not have enough experience or knowledge to implement them properly. I have included the code below. Would anyone be able to point me in the direction of a tutorial that could help me with this, or suggest some additions to my code? The programme was written using emacs on a Mac running mac os 10.2.5 and compiled using g++.

Thanks in advance

will

Code:
// Mastermix Version 0.4
// April 2003
// William Gordon MacKay
// E-mail - [email protected]

#include <iostream.h>

using namespace std;

int main ()

	{
		cout << endl << endl;
		cout << "MASTERMIX (version 0.4 [23.04.2003])" << endl << endl;
		cout << "WG MacKay ([email protected])" << endl << endl;
		cout << "Please enter the volumes for one PCR (in microlitres) below," << endl << endl;
		
		// Defines the PCR reagent variables and prompt the user to asign them values
		// These PCR reagent variables are then asigned names and printed to the terminal

		int ReturnCode = 0;
		
		float pcr = 1;
		cout << "Total vol:	";
		cin >> pcr;
		
		if (!cin.fail()) // numerical value entered
		{
			float pcrB = 1;
			cout << "Buffer:		";
			cin >> pcrB;
		
		if (!cin.fail()) // numerical value entered
		{
			float pcrM = 1;
			cout << "MgCl2:		";
			cin >> pcrM;
		
		if (!cin.fail()) // numerical value entered
		{
			float pcrD = 1;
			cout << "dNTPs:		";
			cin >> pcrD;
		
		if (!cin.fail()) // numerical value entered
		{
			float pcrF = 1;
			cout << "Forward:	";
			cin >> pcrF;
		
		if (!cin.fail()) // numerical value entered
		{
			float pcrR = 1;
			cout << "Reverse:	";
			cin >> pcrR;
		
		if (!cin.fail()) // numerical value entered
		{
			float pcrU = 1;
			cout << "Undefined:	";
			cin >> pcrU;
		
		if (!cin.fail()) // numerical value entered
		{
			float pcrT = 1;
			cout << "Taq:		";
			cin >> pcrT;
									
		if (!cin.fail()) // numerical value entered
		{
			float pcrA = 1;
			cout << "Target:		";
			cin >> pcrA;
		
		if (!cin.fail()) // numerical value entered
		{				
			// The variable water is a special case and is calculated as the "Total volume" - all other volumes
			float Water = (pcr-(pcrB+pcrM+pcrD+pcrF+pcrR+pcrT+pcrU+pcrA));
			cout << "Water:	 	" << Water << endl << endl;
		
			// Defines the "number of reactions" variable and prompt the use to asign it a value.		
		
			float Nr = 1;
			cout << "Enter number of PCR reactions (+1 to account for pipetting error): ";
			cin >> Nr;
			cout << endl;
			
				// New variables are defined that are then multiplied by the "number of reactions" 
				// variable and the corresponding PCR variable.
				// This produces the PCR reagent variable values for a "PCR mastermix".
			
				float Tpcr = Nr*pcr;
				float TpcrB = Nr*pcrB;
				float TpcrM = Nr*pcrM;
				float TpcrD = Nr*pcrD;
				float TpcrF = Nr*pcrF;
				float TpcrR = Nr*pcrR;
				float TpcrT = Nr*pcrT;
				float TpcrA = Nr*pcrA;
				float TWater = Nr*Water;
				
					// The orginal PCR reagent variables and the new variables (multiplied by the "number of reactions" variable.
					// This produces a list of PCR reagents and their corresponding volumes (in microlitres) 
					// for a single PCR reaction and a PCR reaction mastermix
											
					cout << endl;
					cout << "Calculating mastermix..." << endl << endl;
					cout << "PCR x" << Nr << endl << endl;
					cout << "Water:		" << TWater << endl;
					cout << "10X:		" << TpcrB << endl;
					cout << "MgCl2:		" << TpcrM << endl;
					cout << "dNTPS:		" << TpcrD << endl;
					cout << "Forward:	" << TpcrF << endl;
					cout << "Reverse:	" << TpcrR << endl;
					cout << "Taq:		" << TpcrT << endl;						
					cout << "Total Vol:	" << Tpcr << endl;
					cout << endl << endl;
		}
		else
		{
			cerr << "ERROR - invalid input" << endl; 
		
			cin.clear(); // Clear bad input
			char BadInput[5]; // Clear up to 5 characters
			cin >> BadInput;
		
			ReturnCode = 1;
			};
		}
		else
		{
			cerr << "ERROR - invalid input" << endl;
			
			cin.clear(); // Clear bad input
			char BadInput[5]; // Clear up to 5 characters
			cin >> BadInput;
		
			ReturnCode = 1;
			};
		}
		else
		{
			cerr << "ERROR - invalid input" << endl;
					
			cin.clear(); // Clear bad input
			char BadInput[5]; // Clear up to 5 characters
			cin >> BadInput;
		
			ReturnCode = 1;
			};		
		}
		else
		{
			cerr << "ERROR - invalid input" << endl;
		
			cin.clear(); // Clear bad input
			char BadInput[5]; // Clear up to 5 characters
			cin >> BadInput;
		
			ReturnCode = 1;
			};		
		}
		else
		{
			cerr << "ERROR - invalid input" << endl;
						
			cin.clear(); // Clear bad input
			char BadInput[5]; // Clear up to 5 characters
			cin >> BadInput;

			ReturnCode = 1;
			};		
		}
		else
		{
			cerr << "ERROR - invalid input" << endl;
		
			cin.clear(); // Clear bad input
			char BadInput[5]; // Clear up to 5 characters
			cin >> BadInput;
		
			ReturnCode = 1;
			};
		}
		else
		{
			cerr << "ERROR - invalid input" << endl;
		
			cin.clear(); // Clear bad input
			char BadInput[5]; // Clear up to 5 characters
			cin >> BadInput;
	
			ReturnCode = 1;
			};
		}
		else
		{
			cerr << "ERROR - invalid input" << endl;
		
			cin.clear(); // Clear bad input
			char BadInput[5]; // Clear up to 5 characters
			cin >> BadInput;
	
			ReturnCode = 1;
			};
		}
		else
		{
			cerr << "ERROR - invalid input" << endl;	
		
			cin.clear(); // Clear bad input
			char BadInput[5]; // Clear up to 5 characters
			cin >> BadInput;
		
			ReturnCode = 1;
		};
		
	cout << "Goodluck" << endl << endl;
	
	return 0;
}