Temat: Problem z zapisem/odczytem z pliku

Witam, fragment kodu:

ofstream plik("formularz.txt",ios::app);
long pozycja;
pozycja = plik.tellp();

plik << "Zlozono zamowienie na samochod\n";
plik << "Silnik samochodu: "<<ssilnik<< "\n";
plik << "Typ nadwozia: " <<snadwozie<< "\n";
plik << "Kolor lakieru: " <<skolor << "\n";
plik << "Wyposazenie: " <<swyp << "\n\n";
plik << "Koszt czesci wynosi: " << dozaplaty<< "\n\n";
plik.close();

ifstream plik1("formularz.txt");
plik1.seekg(pozycja);
string zmienna;
while(!plik.eof()){
plik1>>zmienna;
cout<<zmienna;

}

Zapis do pliku wykonuje się poprawnie. Natomiast w momencie natrafienia na "ifstream" program się wiesza.
Pierwszy raz piszę program z użyciem zapisu i odczytu, dlatego pewnie coś źle zrobiłem, ale proszę o wyrozumiałość, dopiero zaczynam programować. ;)

Dodam jeszcze, że pracuję w Visual Studio 2010 Ultimate, C++ oczywiście.
A chcę żeby po zapisie do pliku na ekranie pojawiło się to, co właśnie zostało do niego zapisane.

PozdrawiamJacek Ziora edytował(a) ten post dnia 06.06.11 o godzinie 19:35
Przemysław Czatrowski

Przemysław Czatrowski Engine Programmer,
CD Projekt RED

Temat: Problem z zapisem/odczytem z pliku

w pętli while masz warunek

while ( !plik.eof() )

natomiast wewnątrz tej pętli odczytujesz ze zmiennej "plik1" -> nieskończona pętla.

zamień warunek na

while ( !plik1.eof() )

i powinno śmignąć :)
Krzysztof Godlewski

Krzysztof Godlewski ACCOUNT SPECIALIST
BRAND SOCIAL KARMA
MANAGER

Temat: Problem z zapisem/odczytem z pliku

seekg() na zmiennej o niezdefiniowanej wartości też pewnie nie pomaga ;)

Edit: Ślepota, zmienna ustawiana jest na początku, późno już.Krzysztof Godlewski edytował(a) ten post dnia 06.06.11 o godzinie 22:35

Temat: Problem z zapisem/odczytem z pliku

Jak zwykle głupi błąd...
Pętla już działa, ale niestety nie tak jak bym chciał.
Problemy są dwa:
1. Nie czyta mi znaków nowej linii oraz spacji.
2. Czyta cały plik, a mój zamysł jest taki, żeby czytał tylko ostatnie zamówienie, czyli to, co przed chwilą zostało zapisane to pliku (da się tak w ogóle?)

Edit:
zmieniłem nieco kod i rozwiązałem problem nr2.

ofstream plik("formularz.txt",ios::app);
streampos poz;
plik.seekp(poz,ios::end);
long pozycja;
pozycja = plik.tellp();

plik << "Zlozono zamowienie na samochod\n";
plik << "Silnik samochodu: "<<ssilnik<< "\n";
plik << "Typ nadwozia: " <<snadwozie<< "\n";
plik << "Kolor lakieru: " <<skolor << "\n";
plik << "Wyposazenie: " <<swyp << "\n\n";
plik << "Koszt czesci wynosi: " << dozaplaty<< "\n\n";
plik.close();

ifstream plik1("formularz.txt");
plik1.seekg(pozycja);
string zmienna;
while(!plik1.eof()){
plik1>>zmienna;
cout<<zmienna;

}

Niestety nadal mam wszystko w jednym ciągu, a tak być nie może. Mogę co prawda dodać w linijce cout<<zmienna<<"\n" ale wtedy wszystko będę miał w nowej linii, lub jak dodam odstęp, to analogicznie. A wolałbym w takiej formie w jakiej się zapisuje. I nie wiedzieć czemu ostatnią zmienną czyta mi dwa razy...Jacek Ziora edytował(a) ten post dnia 07.06.11 o godzinie 16:42

konto usunięte

Temat: Problem z zapisem/odczytem z pliku

Na dobry początek zamień \n na endl, np. tak:


plik << "Zlozono zamowienie na samochod" << endl;


Raczej nie pomoże ale na pewno będzie bardziej C++.

A jeśli byś chciał to zrobić jakoś bardziej elegancko, to polecam format CSV.
Chyba że to jest na jakieś zaliczenie, to można sobie odpuścić.

Temat: Problem z zapisem/odczytem z pliku

Właśnie jest na zaliczenie kursu, więc bardzo mi na tym zależy. Musi być C++.
A jak zrobić żeby widział mi spacje i znaki nowej linii?

konto usunięte

Temat: Problem z zapisem/odczytem z pliku

nie wiem kiedyś miałem podobny problem
uzylem wtedy komendy
std::getline(cin, model, '\n');

Temat: Problem z zapisem/odczytem z pliku

std::getline(cin, model, '\n');
nie bardzo rozumiem co jest czym tutaj (poza 3. argumentem)

konto usunięte

Temat: Problem z zapisem/odczytem z pliku

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(array<System::String ^> ^args)
{

string zamowienie, ssilnik, snadwozie, skolor, swyp, dozaplaty;
ofstream plik("formularz.txt",ios::app);
streampos poz;
plik.seekp(poz,ios::end);
long pozycja;
pozycja = plik.tellp();

std::getline(cin, zamowienie, '\n');
plik << "Zlozono zamowienie na samochod"<<zamowienie;
std::getline(cin, ssilnik, '\n');
plik << "Silnik samochodu: "<<ssilnik<< "\n";
std::getline(cin, snadwozie, '\n');
plik << "Typ nadwozia: " <<snadwozie<< "\n";
std::getline(cin, skolor, '\n');
plik << "Kolor lakieru: " <<skolor << "\n";
std::getline(cin, swyp, '\n');
plik << "Wyposazenie: " <<swyp << "\n\n";
std::getline(cin, dozaplaty, '\n');
plik << "Koszt czesci wynosi: " << dozaplaty<< "\n\n";
plik.close();

ifstream plik1("formularz.txt");
plik1.seekg(pozycja);
string zmienna;
while(!plik1.eof()){
plik1>>zmienna;
cout<<zmienna;
}
system("PAUSE");
}

Temat: Problem z zapisem/odczytem z pliku

Dzięki. :)
Jednakże w międzyczasie poradziłem sobie inaczej.
Działa tak, jak chciałem i jest chyba nieco krócej.;)
#include <vector>
...
int dozaplaty;
dozaplaty = cenasilnika + cenalakieru+cenanadwozia+cenawyp;

vector<string>vec_s;

ofstream plik("formularz.txt",ios::app);
streampos poz;
plik.seekp(poz,ios::end);
long pozycja;
pozycja = plik.tellp();

plik << "=============="<<endl;
plik << "Zlozono zamowienie na samochod"<<endl;
plik << "Silnik samochodu: "<<ssilnik<< endl;
plik << "Typ nadwozia: " <<snadwozie<< endl;
plik << "Kolor lakieru: " <<skolor << endl;
plik << "Wyposazenie: " <<swyp << endl<<endl;
plik << "Koszt czesci wynosi: " << dozaplaty<< endl;
plik << "=============="<<endl<<endl;
plik.close();

ifstream plik1("formularz.txt");
plik1.seekg(pozycja);
string zmienna;
while(!plik1.eof())
{
getline(plik1,zmienna);
cout<<zmienna<<endl;
vec_s.push_back(zmienna);
}
...

Następna dyskusja:

Problem z dynamicznym przyd...




Wyślij zaproszenie do