Uwagi co do Twojego programu:
- Jeżeli działasz na zmiennych wejścia/wyjścia fstream to musisz wskazać odpowiedni tryb otwarcia pliku tzn. do czego będzie on przeznaczony - wczytywania danych z pliku do programu, czy wypisywania z programu do pliku, jeżeli działasz na jednym pliku (co wydaje mi się dosyć dziwne) to powinieneś udostępnić wejście i wyjście oddzielając je pionową kreską:
plik.open( "nazwa_pliku.txt", ios::in | ios::out );
-
Zauważ, że zamykasz sobie uchwyt do pliku w pętli po pobraniu znaku. Wniosek: zamknij "plik" po wyjściu z pętli.
-
Być może taki miałeś zamiar, ale twój pomysł nie odczytuje z pliku, a jedynie ze strumienia w konsoli, więc nie wiem, czy cin jest tutaj potrzebny.
Spójrz na moje rozwiązanie :) Jeżeli wracasz do podstaw, to stwórz sobie uchwyt do wejścia i wyjścia, w ten sposób będziesz wiedział z którego pliku odczytujesz dane, a do którego będziesz je wrzucał. Poniższy program będzie wczytywał kolejne linijki tekstu, możesz oczywiście wczytywać pojedyncze typy tak jak u Ciebie (char) lub np. int jednak wtedy dobrze wiedzieć ile takich danych jest...
#include <fstream>
#include <iostream>
using namespace std;
int main() {
ifstream wejscie;
ofstream wyjscie;
wejscie.open("wejscie.txt");
wyjscie.open("wyjscie.txt");
// możesz sprawdzić, czy otwarto poprawnie metodą good()
string linijka;
// teraz będziemy czytać do końca pliku kolejne linijki i zapisywać je w drugim
while(!wejscie.eof()) {
getline(wejscie,linijka);
wyjscie << linijka << endl;
}
// przydałoby się zamknąć metodą close() oba pliki - poza pętlą
return 0;
}
Więcej informacji o obsłudze plików w takiej pigułce znajdziesz tutaj:
http://cpp0x.pl/kursy/Kurs-C++/Obsluga-plikow/305
Powodzenia i pozdrawiam ; )