[C++]Zapis pliku przy użyciu fstream

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
macer
Wytworny Kaczor
Wytworny Kaczor
Posty: 453
Rejestracja: 12 wrz 2009, 21:07
Wersja Ubuntu: inny OS

[C++]Zapis pliku przy użyciu fstream

Post autor: macer »

Chciałem się w końcu nauczyć obslugi plików w c++ i testowo wykombinowałem coś takiego:

Kod: Zaznacz cały

#include <iostream>
#include <fstream>
using namespace std;
int main(int argc,char* argv[])
{
	cout << "Hello World!\n";
	ofstream test("plik.txt");
	
	if(test)
	{
		test << "To działa!!!!" << endl 
		test << "Naprawdę działa!!!!";
		cout << "Udany zapis do pliku :)";
		
	}
	else
		cout << "Wystąpił błąd w zapisie do pliku :(";
	getchar();
}
Oczywiście w konsoli dostaję "Udany zapis do pliku :)", ale w pliku test.txt mam tylko

Kod: Zaznacz cały

To działa!!!!
A powinno być

Kod: Zaznacz cały

To działa!!!!
Naprawdę działa!!!!
Wie ktoś co na to poradzić?
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: [C++]Problem z zapisem pliku przy użyciu fstream

Post autor: kabanek »

po pierwsze jak masz funkcję int main to pasuje, żeby ona coś zwracała :)

u mnie działa ten kod:

Kod: Zaznacz cały

#include <iostream>
#include <fstream>
using namespace std;
int main(int argc,char* argv[])
{
	cout << "Hello World!\n";
	ofstream test("plik.txt");
	
	if(test)
	{
		test << "To działa!!!!" << endl;
		test << "Naprawdę działa!!!!"<<endl;
		cout << "Udany zapis do pliku :)";
		
	}
	else
		cout << "Wystąpił błąd w zapisie do pliku :(";
	getchar();
	
	return 0;
}
a dlaczego? Poczytaj co tak naprawdę robi endl.
Podpowiem, że nie tylko dodaje znak nowej linii :)
macer
Wytworny Kaczor
Wytworny Kaczor
Posty: 453
Rejestracja: 12 wrz 2009, 21:07
Wersja Ubuntu: inny OS

Odp: [C++]Problem z zapisem pliku przy użyciu fstream

Post autor: macer »

Niech zgadnę...kończy plik?

Wielkie dzięki za odpowiedź, bo sam bym na to nie wpadł :-D
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: [C++]Problem z zapisem pliku przy użyciu fstream

Post autor: kabanek »

macer
Wytworny Kaczor
Wytworny Kaczor
Posty: 453
Rejestracja: 12 wrz 2009, 21:07
Wersja Ubuntu: inny OS

Odp: [C++]Problem z zapisem pliku przy użyciu fstream

Post autor: macer »

I jeszcze jedno przepraszam, bo napisałem dwa razy plik, ale zaraz to poprawiłem :)
Tylko linux mi się zawiesił i zanim zmieniłem nazwę tematu zdążyły minąć jakieś 2 minuty.

EDIT:
@kabanek: troszeczkę słabo u mnie z angielskim, mógłbyś mi to w skrócie wytłumaczyć(po polsku :-D)?

Czy dobrze to zrozumiałem endl daję nową linie i odświeża(flush) a flush tylko odświeża?
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [C++]Zapis pliku przy użyciu fstream

Post autor: beluosus »

Jak najbardziej może być w ostatniej linii bez endl. Np gdybyśmy nie chcieli znaku końca linii na końcu pliku. :) Tylko trzeba pamiętać żeby po skończonej pracy zamknąć plik!

Kod: Zaznacz cały

test.close();
Tak obrazowo: flush powoduje, że program robi z buforem to co ma robić nie czekając aż więcej informacji się w nim nazbiera.
Proponuję również nie korzystać z getchar() tylko pracować w programie, który zatrzyma nasz program na samym końcu (np geany czy code::blocks).
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
macer
Wytworny Kaczor
Wytworny Kaczor
Posty: 453
Rejestracja: 12 wrz 2009, 21:07
Wersja Ubuntu: inny OS

Odp: [C++]Zapis pliku przy użyciu fstream

Post autor: macer »

Pracuje ostatnio w gedit, chociaż mam:Anjute,netbeans,eclipse,code::blocks, i qtcreator(do c++, bo wszystkich ide mam troche wiecej :) ).
Ale najbardziej do gustu przypadło mi zwykłe gedit.
A geany to podobno coś jak gedit, tylko odrazu kompiluje.
Zaraz go sobię ściągnę i wypróbóje.

A za odpowiedz wielki dzięki :)

PS w code::blocks można robić chyba tylko w c :(

EDIT:
Tak czy siak się to getchar() się jednak nie przydało, bo jak uruchamiałem program z pliku desktop to i tak się konsola nie zatrzymywała :(
Więc uruchamiałem w normalnej konsoli i można by to wywalić.
pawegio
Sędziwy Jeż
Sędziwy Jeż
Posty: 31
Rejestracja: 20 sie 2009, 11:17
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [C++]Zapis pliku przy użyciu fstream

Post autor: pawegio »

Gdy się nie buduje większych aplikacji z własnymi bibliotekami i licznymi kodami źródłowymi, tylko wszystko kompiluje się z jednego pliku *.cpp to gedit moim zdaniem również jest najwygodniejsze.
macer
Wytworny Kaczor
Wytworny Kaczor
Posty: 453
Rejestracja: 12 wrz 2009, 21:07
Wersja Ubuntu: inny OS

Odp: [C++]Zapis pliku przy użyciu fstream

Post autor: macer »

Chociaż można i kilka plików otworzyć i będze wygodnie.
Najprostszy makefile:

Kod: Zaznacz cały

all: main.cpp
(tab)g++ *.cpp *.h -o program
I lepiej być nie może :)

PS tam gdzie jest (tab) to trzeba tab zrobić bo tutaj na forum jakoś się nieda.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości