A rigor di logica non salvi niente visto che leggi un carattere e lo rimetti dentro.
Ho modificato un pò il codice in modo che siano chiari i passaggi.
codice:
#include <iostream> 
#include <fstream> 
#include <string>
using namespace std;

//stampo a video il file ciao 
void stampa_video() { 
	fstream vale("ciao",ios::in);
	string line;
	while (getline(vale,line)) 
		cout << line << endl;
	vale.close();
} 

// scrivo nel file ciao distruggendo ogni volta il contenuto.
void scrivi_qualcosa () { 
	ofstream vale ("ciao", ios::out );
 	if (!vale) { cerr<<"No file"; return; }
	string line;
	getline(cin,line);
	vale << line;
	vale.close();
}

// scrivo nel file ciao aggiungendo ogni volta il contenuto.
void scrivi_qualcosa_altro() { 
	fstream vale("ciao",ios::out | ios::app) ;
	string line;
	getline(cin,line);
	vale<<line; 
	vale.close(); 
} 

int main() { 
	cout<<"scrivi nel file: "<<endl; 
	scrivi_qualcosa(); 
	cout<<endl;

	stampa_video();
	cout<<endl; 
	scrivi_qualcosa_altro();

	stampa_video();
	cin.get();
	return 0; 
}