Problem z prostym programem w c++


(Dash Yd) #1

Witam,

 

na początek chciałem się przywitać na nowym forum :wink:)

 

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).

#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();
	}
}

(Rolek0) #2

>> wczytuje napisy do pierwszego białego znaku.

Jeśli chcesz wczytywać całą linię zainteresuj się funkcją getline.

PS. http://gynvael.coldwind.pl/?id=238, http://www.intercon.pl/~sektor/cbx/, http://xion.org.pl/productions/texts/coding/megatutorial/ :wink: