Weryfikacja danych przed dodaniem do pliku

0

Witam!
Poruszałem już w/w problem na tym forum lecz nie uzyskałem wartościowej odpowiedzi. Chce zastosowac weryfikacje danych przed wprowadzeniem danych do rekordu. Ma to wygladac tak: podaje dane, pytanie czy dane sa poprawne [T/N] jesli tak to dodaje do pliku jesli nie to ponownie podaje. Zastosowalem pętle do while. Działa poprawnie i gdy naciśnę pętle podawanie danych powtarza się lecz błędny rekord zostaje dodany do rekordu. Co jest nie tak w ponizszym kodzie?:

void dodaj_do_bazy(const char* in,uczen *s,int n)  // Dodanie do bazy, wskaznik na nazwe pliku (in) i wskaznik  s na strukture);
{
	ofstream plik;
	plik.open(in);
char znak;
znak=getchar();
	for(int i=0;i<n;++i)
	{
	do
	{
    	s[i].nr = i+1;
	
		cout<<"Podaj Imie :\n";
		cin>>s[i].imie;

		cout<<"Podaj Nazwisko :\n";
		cin>>s[i].nazwisko;
	
		cout<<"Klasa :\n";
		cin>>s[i].klasa;
		
		cout<<"Podaj ocene z zachowania :\n";
		cin>>s[i].zach;
	
		cout<<"Podaj srednia ocen :\n";
		cin>>s[i].srednia;
		
		 cin >> znak;
	
}while(znak !='t');
 if (znak == 't')
  {
   	plik<<s[i].nr<<endl;    
   	plik<<s[i].imie<<endl;   
    	plik<<s[i].nazwisko<<endl;      
    	plik<<s[i].klasa<<endl;
    		plik<<s[i].zach<<endl;
    		plik<<s[i].srednia<<endl;
		plik<<"\n\n";
    }

	plik.close();
}
}
		 
0

Na pewno nie działa? Skompilowałem na szybko podobny kod i działał

0

Działa? Przy wciśnięciu 'n' nie dodaje Ci błędnego rekordu?
<image> http://img33.imageshack.us/i/beztytuuara.png/</image>
Załączyłem screena. Pierwszy rekord został wpisany błędnie, wpisałem go ponownie poprawnie ale dodało obydwa. Może być coś nie tak z kompilatorem? Dodałem jedną opcję, ładnie wszystko skompilowało ale pomimo tego nie ma jej w programie!..

0

Wczytujesz znak przed wejściem do pętli. Podając znak inny niż 't' nie dajesz programowi szansy na podmianę. Według standardu C++ nie powinno się używać getchar(), raczej użyj cin.get()

0

Nie kompilowałem dokładnie tego kodu więc nie wiem jak z dodawaniem do bazy, co do getchar() to spróbuj cin , ew ustawić na początku znak='n'

0

Problem rozwiązany, wystarczyło wszystkie dane zapisać do pliku tymczasowego, czekać za wciśnięciem klawisza, jeśli klawsz ='t' to zapisujedo pliku :)

0
Langol napisał(a)

}while(znak !='t');
if (znak == 't')

Równie dobrze tego warunku mogłoby nie być.

poza tym, spróbuj wymyślić sobie sposób żeby użytkownik miał prawo zmienić tylko jedną rzecz a nie wszystkie na raz jeśli pomyli się przy jednej.

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