Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Przekazywanie struktur do funkcji, getline

Ostatnio zmodyfikowano 2017-03-11 22:21
Autor Wiadomość
AndrzejS00
Temat założony przez niniejszego użytkownika
[C++] Przekazywanie struktur do funkcji, getline
» 2017-03-11 20:56:29
Witam, po dłuższej przerwie w programowaniu wracam i napotykam problem związany z... w sumie ciężko powiedzieć.

Problem może być związany z brakiem poprawności w zapisie, czymś błahym, trywialnym, wcześniej nie stosowałem struktur na taką skalę.

Problem jest w tym, że program nie dopisuje do pliku tekstowego pewnych danych, które zawierają się w strukturach. Kilka razy próbowałem modyfikować kod, niewiele pomogło. A miało być tak pięknie...

Proszę o pomoc, z góry dzięki :)

PS: Pliki i odpowiednie foldery oczywiście istnieją, dostęp do dysku jest, to nie jest związane z ich brakiem.
PS-2: Coś nie tak z pętlą do while w funkcji void form, teoretycznie wpisanie czegoś nieodpowiedniego do programu, np. liter, wyrazów powinno spowodować powtórzenie się pętli, a tak się nie dzieje.

#include <iostream>
#include <string>
#include <fstream>
#include <conio.h>
#include <windows.h>
void powit(); void opening(std::fstream &); void form(struct struk &); void write(std::fstream &, struct struk &);
struct struk{ std::string imie; std::string nazwisko; std::string adres; std::string miejscowosc; std::string kod_poczt; long long telefon; std::string notatki; };
int main()
{
std::fstream dest; struk klient;
powit();
opening(dest);
form(klient);
write(dest, klient);
}
void powit()
{
using std::cout;
cout << "Form #1\n\nThis program helps you to fill in customer's table in one writing system!\n\n";
cout << "Loading"; for (int i = 0; i!=5; i++) { cout << "."; Sleep(1000); }
}
void opening(std::fstream & dest)
{
using std::cout; using std::ios; dest.open("Tabels\\Customers.txt", ios::in|ios::app);
if (!(dest.good())) { cout << "\n\nError 101 - Harddisk is non accessable.\n\nPress any key to exit!"; getch(); exit(0); }
}
void form(struct struk & klient)
{
using std::cout; using std::cin; using std::getline; long long a;
cout << "Success!\n\n";
cout << "Name: "; getline(cin, klient.imie);
cout << "Surname: "; getline(cin, klient.nazwisko);
cout << "Adress: "; getline(cin, klient.adres);
cout << "Place: "; getline(cin, klient.miejscowosc);
cout << "Postal Code: "; getline(cin, klient.kod_poczt);
do { cout << "Phone Number: "; cin >> a; cin.clear(); cin.sync(); } while(!cin.good());
klient.telefon = a;
cout << "Notes: "; getline(cin, klient.notatki);
}
void write(std::fstream & dest, struct struk & klient)
{
using std::cout; cout << "Writing";
for (int i = 0; i!=5; i++) { cout << "."; Sleep(1000); }
std::string linia; int o = 1;
while (!dest.eof())
{
std::getline(dest, linia);
if (linia=="---") o++;
}
dest << "---\n";
dest << "ID=" << o << "\n";
dest << "Name=" << klient.imie << "\n";
dest << "Surname=" << klient.nazwisko << "\n";
dest << "Adress=" << klient.adres << "\n";
dest << "Place=" << klient.miejscowosc << "\n";
dest << "PostalCode=" << klient.kod_poczt << "\n";
dest << "PhoneNumber=" << klient.telefon << "\n";
dest << "Notes=" << klient.notatki << "\n";
}

PS-3: To mój pierwszy temat na forum, starałem się znaleźć rozwiązania problemu w internecie, może nie tego, co trzeba szukałem, proszę o wyrozumiałość

A.S.
P-158883
kistel66
» 2017-03-11 21:58:25
W funkcji write():
C/C++
while( !dest.eof() )
{
    std::getline( dest, linia );
    if( linia == "---" ) o++;
   
}
//dopisz te dwie linijki 
dest.clear(); // czyści flagi
dest.seekg( 0, ios::beg ); // ustawia pozycje znowu na początek

dest << "---\n";
dest << "ID=" << o << "\n";
dest << "Name=" << klient.imie << "\n";
dest << "Surname=" << klient.nazwisko << "\n";
dest << "Adress=" << klient.adres << "\n";
dest << "Place=" << klient.miejscowosc << "\n";
dest << "PostalCode=" << klient.kod_poczt << "\n";
dest << "PhoneNumber=" << klient.telefon << "\n";
dest << "Notes=" << klient.notatki << "\n";

Skoro otwierasz też plik w funkcji opening(), wypadałoby go też po zapisie zamknąć.
P-158887
AndrzejS00
Temat założony przez niniejszego użytkownika
» 2017-03-11 22:21:43
@up Dzięki za odpowiedź i rozwiązanie, teraz wszystko działa. Podpowiedziałeś mi w czym mniej więcej tkwi problem, wpisałem w wyszukiwarkę to co trzeba i już rozumiem, dlaczego program nie zapisywał do pliku. Gdyby ktoś miał taki sam problem:

Link do innego tematu-rozwiązania na forum: http://cpp0x.pl/forum/temat/?id=19776

Jeszcze raz dzięki, pozdrawiam,
A. S. :)
P-158892
« 1 »
  Strona 1 z 1