Program dzialajacy tylko co drugi raz, prosze o sprawdzenie

0

Witam!

Mam do napisania pewien program i go napisałem. Ale działa tylko co drugi raz :( Niewiem gdzie mam błąd. Jak ktoś byłby na tyle uprzejmy, sprawdzić.

Pozdrawiam!


#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;

struct zespolona
{
	float re,im;
};

void utworz_plik()
{
	zespolona a;
	char znak;
	int i = 0;
	
	ofstream zesp("zesp.bin",ios::binary);
	
	do
	{
		cout << "Liczba " << i+1 << ":" << endl << endl;
		cout << "Podaj Re:" << endl;
		cin >> a.re;
		cout << "Podaj Im:" << endl;
		cin >> a.im;
		
		zesp.write((char *)&a, sizeof(zespolona));
		
		cout << "[T] lub [t] - aby podac kolejna liczbe" << endl;
		cin >> znak;
		i++;
	}
	
	while (znak == 't' || znak == 'T');
}

int main()
{
	zespolona b;
	float c;
	
	fstream zesp("zesp.bin", ios::in|ios::binary);
	fstream modul("modul.txt", ios::out);
	
	cout << endl << endl;
	cout << "Witaj w programie!" << endl << endl;
	
	cout << "-program wczytuje liczby zespolone do pliku zesp.bin" << endl;
	cout << "-program odczytuje liczby zespolone z pliku zesp.bin" << endl;
	cout << "-program zapisuje moduly tych liczb do pliku modul.txt" << endl << endl;
	
	utworz_plik();
	
	while(!zesp.eof())
	{
		zesp.read((char *)&b, sizeof(zespolona));
		
		if(zesp.good())
		{
			c = sqrt((b.re)*(b.re) + (b.im)*(b.im));
			modul << c << endl << endl;
		}
	}
	
	zesp.close();
	modul.close();
	
	return 0;
	
}

0

Zamień te dwie linijki:

fstream zesp("zesp.bin", ios::in|ios::binary);

i

utworz_plik();
0

Sprawdziłem program i według mnie wszystko poprawnie działa (przynajmniej w Debug).
Jedynie co u mnie się działo, to to, że po wprowadzeniu liczb musiałem zamiast T lub t wprowadzić
ENTER i jakiś znak. Tak to wszystko poprawnie działa, nie ma żadnych błędów.
Może ja coś źle wkleiłem albo coś... nie wiem
btw. zmieniłem #include <math.h> na #include <cmath>

0

Podziękował! :)

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