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

[C++] Zapisywanie znaków włącznie ze spacją

Ostatnio zmodyfikowano 2015-01-15 19:11
Autor Wiadomość
remik666
Temat założony przez niniejszego użytkownika
[C++] Zapisywanie znaków włącznie ze spacją
» 2015-01-14 19:33:31
Witam,
 
na początek chciałem się przywitać na nowym forum ;))
 
Miałem zrobić program na zaliczenie przedmiotu, lecz mam mały problem, mianowicie program działa, lecz po wpisaniu jakiejkolwiek nazwy ze spacją, wpis rozdziela na 2 osobne wpisy (np. jak wpiszę imię i nazwisko ze spacją to zapisuje jako imię pierwszy człon a to co jest za spacją przypisuje do kolejnego wpisu).

Wiem, że odpowiedzialna za to jest funkcja getline ale nie mogę jakoś jej wdrążyć prawidłowo, tak aby program po skompilowaniu działał, siedzę już nad tym n-tą godzinę i nie mam zielonego pojęcia ocb.

C/C++
#include <iostream>
#include <conio.h>
#include <string>
#include <fstream>


using namespace std;

struct klienci
{
    string imie;
    string adres;
    string adres1;
    string nip;
};

short i; // zmienna przechowujaca ilosc klientów
klienci klienci[ 200 ]; //200 elementowa tablica struktur

void Dodaj(); //deklaruje funkcje
void Zobacz();
void Zapisz();
void Wczytaj();
void Usun();
void Edytuj();


int main()
{
    cout << "******************************\n"
    "*******Lista klient\242w*********\n"
    "*****Adrian Krawczy\344ski*******\n"
    "******************************\n";
    cout << "\n\n\n";
    char wybor;
   
    do
    {
        cout << "Aktualnie posiadasz " << i << " Klient\242w" << endl;
        cout << "1. Dodaj klienta " << endl;
        cout << "2. Zobacz wszystkich klient\242w " << endl;
        cout << "3. Zapisz wprowadzonych klient\242w " << endl;
        cout << "4. Wczytaj klient\242w z bazy " << endl;
        cout << "5. Usun klienta " << endl;
        cout << "6. Edytuj klienta " << endl;
       
        cout << "ESC - Koniec programu " << endl << endl;
       
        wybor = _getch();
       
        switch( wybor )
        {
        case 49: Dodaj();
            break;
        case 50: Zobacz();
            break;
        case 51: Zapisz();
            break;
        case 52: Wczytaj();
            break;
        case 53: Usun();
            break;
        case 54: Edytuj();
            break;
        }
       
        system( "cls" );
    } while( wybor != 27 );
   
   
   
    // system("pause");
    return 0;
} // koniec main
void Dodaj()
{
    cout << "Imi\251 i nazwisko/nazwa firmy: \n"; ////przypisanie wartości x w obiekcie klienci
    cin >> klienci[ i ].imie;
   
    cout << "Ulica: \n";
    cin >> klienci[ i ].adres;
   
    cout << "Kod pocztowy i miasto: \n";
    cin >> klienci[ i ].adres1;
   
    cout << "NIP: \n";
    cin >> klienci[ i ].nip;
   
    cin.ignore();
   
    i++;
   
    cout << ". Wcisnij enter";
    getchar();
}
void Zobacz()
{
    if( i != 0 ) //musi byc conajmniej 1 element do wypisania
    {
        for( short j = 0; j < i; j++ ) //j jest indeksem umozliwiajacym wypisywanie kolejnych elementow.wypisuje od 0 do i
        { //j<i wyswietlanie prawidlowej wartosci   i = j-1
            cout << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" << endl;
            cout << "x     Klient nr " << j + 1 << ": " << endl;
            cout << "x     Nazwa: " << klienci[ j ].imie << endl;
            cout << "x     Ulica: " << klienci[ j ].adres << endl;
            cout << "x     Kod pocztowy i miasto: " << klienci[ j ].adres1 << endl;
            cout << "x     NIP: " << klienci[ j ].nip << endl;
            cout << "x";
            cout << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" << endl;
           
           
        }
    }
    else
         cout << "Nie ma takiego klienta w bazie!!";
   
    cout << "Nacisnij ENTER";
   
    getchar();
}

void Zapisz()
{
    ofstream plik( "klienci.txt", ios::out | ios::trunc );
   
    plik << i << "\n";
   
    for( short j = 0; j < i; j++ )
    {
        plik << klienci[ j ].imie << endl;
        plik << klienci[ j ].adres << endl;
        plik << klienci[ j ].adres1 << endl;
        plik << klienci[ j ].nip << endl;
    }
   
    cout << "Dane zostaly zapisane! :). Wcisnij ENTER";
   
    getchar();
}



void Wczytaj()
{
    ifstream plik( "klienci.txt", ios::in );
   
    plik >> i;
   
   
    short j = 0;
   
    do
    {
        plik >> klienci[ j ].imie;
        plik >> klienci[ j ].adres;
        plik >> klienci[ j ].adres1;
        plik >> klienci[ j ].nip;
        j++;
    } while( !plik.eof() );
   
    cout << "Wczytano dane. Nacisnij ENTER!";
   
    getchar();
}

void Usun()
{
    short kogo;
   
    if( i != 0 )
    {
        cout << "Podaj numer klienta ktorego chcesz usunac: ";
        cin >> kogo;
        cin.ignore();
       
        if( kogo > i )
             cout << "Operacja nie powiodla sie. Brak klienta o takim numerze";
        else
        {
            for( short k = kogo; k < i; k++ )
            {
                klienci[ k - 1 ].imie = klienci[ k ].imie; //polega na zastapieniu elementu , elementem nastepnym,  na nastepnie i--
                klienci[ k - 1 ].adres = klienci[ k ].adres;
                klienci[ k - 1 ].adres1 = klienci[ k ].adres1;
                klienci[ k - 1 ].nip = klienci[ k ].nip;
            }
            i--;
           
            cout << "Operacja zakonczyla sie sukcesem! klient o numerze " << kogo << " zostal usuniety!";
            Zapisz();
        }
       
    }
    else
    {
        cout << "Nie ma klientów w bazie!! Wcisnij ENTER!";
        getchar();
    }
}

void Edytuj()
{
    //short kogo;
    int kogo;
   
    if( i != 0 )
    {
        cout << "Podaj numer klienta ktora chcesz zmienic: ";
        cin >> kogo;
        cin.ignore();
       
        if( kogo > i )
             cout << "Operacja nie powiodla sie. Brak klienta o takim numerze";
        else
        {
            //jest -1 bo zakladam ze numeracja klientów jest taka jak w wypisaniu. Natomiast
            // tablica zaczyna sie od zera.
            cout << "Podaj nazw\251 klienta: \n";
            cin >> klienci[ kogo - 1 ].imie; //jest -1 bo zakladam ze numeracja klientów jest taka jak w wypisaniu. Natiomiast
            // tablica zaczyna sie od zera.
            cout << "Podaj adresy: \n";;
            cin >> klienci[ kogo - 1 ].adres;
            cout << "Podaj kod pocztowy i miasto: \n";
            cin >> klienci[ kogo - 1 ].adres1;
            cout << "Podaj nip: \n";
            cin >> klienci[ kogo - 1 ].nip;
           
           
            cout << "Operacja zakonczyla sie sukcesem! klient o numerze " << kogo << " zosta\210 zmieniony!";
            Zapisz();
        }
       
    }
    else
    {
        cout << "Nie ma klient\242w w bazie!! Wcisnij ENTER!";
        getchar();
    }
}
P-124931
killermannnnn
» 2015-01-14 20:18:11
U mnie na takim czyś działa:

getline( cin, klienci[ i ].imie )

Pokaż twoje wdrożenie getline to zobaczymy gdzie robisz błąd
P-124939
remik666
Temat założony przez niniejszego użytkownika
» 2015-01-15 19:11:24
Błachy powód... zapomniałem przecinka po cin ;]

Dzięki za pomoc ;)
P-124988
« 1 »
  Strona 1 z 1