Zapisywanie do stringa - po wpisaniu frazy dwuczłonowej wywala program

0

Witam,

Mam problem z zapisem danych z klawiatury do pliku przez stringa. Otóż po wpisaniu frazy dwuczłonowej (spacja między pierwszą i drugą częścią) wywala mi program.

ofstream plik;
plik.open(argv[1]);
for(int i=0;i<roz;++i)
{
    plik<<s[i].numer<<endl;
    plik<<s[i].nazwa<<endl;
    plik<<s[i].NIP<<endl;
    plik<<s[i].kodPocztowy<<endl;
    plik<<s[i].miejscowosc<<endl;
    plik<<s[i].adres<<endl;
    plik<<endl<<endl;
}
plik.close();

zmniejszenie wcięć w kodzie - fp

0

Bo w konsoli musisz dać \ przed spacją albo otoczyć nazwe pliku "" żeby wczytało ci to jako jeden ciąg...

0

Po użyciu "" nie wywala bledu, a przeskakuje pozostale kroki, a do pliku i tak jest wpisany pierwszy czlon, podobnie jest z \

0

Błąd masz w 73 linii.

0

@brez o jakiej nazwie mówisz?
Jeżeli o nazwie pliku to @Shalom ci powiedział co i jak.
Jeżeli o nazwa z tablicy struktur s[i] to przedstawiony kod nie ma z tym nic wspólnego, wypisuje do pliku jedynie to co masz w strukturze.

0

Przepraszam, bo zagmatwalem sytuacje. Chodzi mi o nazwe z tablicy struktur:

class Klient
{
public:
	int numer;		   ///   numer w bazie
	string nazwa;
	int NIP;
	int kodPocztowy;
	string miejscowosc;
	string adres;

	Klient(void);
	Klient(int numer, string nazwa, int NIP, int kodPocztowy, string miejscowosc, string adres);

	void dodajKlienta(char *in, Klient *s, int n);
	int rozmiar(char *in);
	void zpliku(char *in, Klient *s,int n);
	void usunKlienta(Klient *s,int n,int ktory);
	void kopia(Klient *s,int n,char *out);
	void wypisz(Klient *s,int n);

	~Klient(void);
};

//Funkcja odpowiedzialna za dodawnie klienta
void Klient :: dodajKlienta(char *in, Klient *s, int n)
{
	ofstream plik;
	plik.open(in);

	for(int i=0;i<n;++i)
	{
		s[i].numer = i+1;
		plik<<s[i].numer<<endl;
		cout<<"Podaj nazwe : ";
		cin>>s[i].nazwa;
		plik<<s[i].nazwa<<endl;  // tutaj nie mozna dodac dwuczlonowej nazwy
		cout<<"Podaj NIP : ";
		cin>>s[i].NIP;
		plik<<s[i].NIP<<endl;
		cout<<"Podaj rok kod pocztowy : ";
		cin>>s[i].kodPocztowy;
		plik<<s[i].kodPocztowy<<endl;
		cout<<"Podaj miejscowosc : ";
		cin>>s[i].miejscowosc;
		plik<<s[i].miejscowosc<<endl;
		cout<<"Podaj adres : ";
		cin>>s[i].adres;
		plik<<s[i].adres<<endl;
		
		plik<<endl<<endl;
	}
	plik.close();
} 
2

Bzdury piszesz. To za pomocą cin>> nie możesz wczytać dwuczłonowej nazwy. MYŚL! Robisz coś takiego:
cin>>x;
cin>>y;
cin>>z;
I podajesz z klawiatury 4 słowa oddzielone spacjami. I chcesz żeby 'y' było dwuczłonowe. Potrafisz mi powiedzieć jak wg ciebie kompilator ma przewidzieć która zmienna ma być dwuczłonowa a która nie? Przecież kompilator nie czyta ci w myslach..

1

Może powinieneś użyć to:

getline(cin,s[i].nazwa);
0

A może by tak zamiast strumieni użyć fprintf ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1