Zapisywanie wciskanych klawiszy do pliku.

0

Witam

Mam problem polegający na tym że gdy w pętli if nie wstawię while(1) to poprawnie zapisuje do pliku txt klikane klawisze ale na kazdy znak trzeba uruchamiac od nowa program i po kazdym znaku program sie zamyka.W czym problem?

#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>

using namespace std;

int main()
{
home:
ofstream keys("C:/test.txt", ios::app);	 
if(keys)    // Sprawdzamy czy plik został otwarty.
	{	
		cout << "Plik odtworzony pomyslnie." << endl;
		while(1)
		{
		string znak;
		znak = getch();
		keys << znak; // zapisujemy klawisz do pliku
		}
	}
else
	{
	cout << "BLAD: nie mozna otworzyc pliku." << endl;
	if(getch() == 27) goto home; //jesli klikniesz esc sprobojesz od nowa wczytac plik
	}
return 0;
}
0

Witam,

Program jest dość nieładnie napisany. Używanie etykiet w tak prostym programie jest niedobre.
Zresztą w ogóle używanie etykiet jest niedobre, bo to naleciałość jeszcze z czasów assemblera i C.

Tak to powinno wyglądać, jeżeli chcesz używać conio.h:


#include <iostream>
#include <fstream>
#include <conio.h>


int main()
{
    char znak;
    std::fstream plik("znaki.txt", std::ios::out | std::ios::app);

    if(plik.is_open()){
        do{
            znak = getch();
            plik << znak;
        }while(znak != 'k');
    }

    plik.close();
    system("PAUSE");
}

Pozdrawiam
Grzesiek

0

Po pierwsze to nie opisales co dokladnie nie dziala. Pewnie problem z buforem, sprobuj dodac cos w rodzaju endl w linijce "keys << znak". Nie wiem czy tak to sie robi, nie znam c++

0

Nadal nie działa.
Ale ja nie chce "endl" bo chce żeby wszystkie znaki były po kolei a nie każdy w osobnej linijce.
Nie działa chodzi o to że jak dodam tam while(1) to nie zapisuje mi nic do pliku.

0

Program się wiesza, bo kolega nie zastosował warunku opuszczenia pętli nieskończonej to po pierwsze :)
Po drugie nie ma potrzeby zapisywanie znaku do obiektu klasy std::string gdyż z powodzeniem mieści się on w obiekcie typu char.

To co napisałem w pierwszym zdaniu powodowało błędy.

PS: Wstawiłeś zapewne while(1), żeby chociaż raz pobrać znak. Też niedobrze, bo od tego jest pętla 'do while'.

3
#include <iostream>
#include <algorithm>
#include <fstream>
#include <iterator>
using namespace std;

int main() {
	// ofstream myAwesomeFile("/path/to/file");
	
	cin >> noskipws;
	
	copy
	(
		istream_iterator<char>(cin),
		istream_iterator<char>(),
		ostream_iterator<char>(cout)	// myAwesomeFile
	);
	
	return 0;
}

http://ideone.com/DufHfb

1 użytkowników online, w tym zalogowanych: 0, gości: 1