Witam, stworzylem program ktory tworzy strukturalna tablice typu student{nazwisko, imie, wiek}, nastepnie w zaleznosci od wyboru uzytkownika prosi o wprowadzenie danych, zapisuje je do pliku, lub odczytuje je z tegoz pliku. Wszystko smiga ladnie dopoki zmienne strukturalne sa typu string, natomiast gdy wiek zrobie typu int w zasadzie dziala dalej, ale po odczytaniu wszystkich danych z pliku i zapisie do struktury na koncu dopisuje '0'.
Skonczyly mi sie pomysly o co moze chodzic.
Dzialanie programu jest intuicyjne, jesli ktos z Was sie zlituje i skompiluje u siebie i wprowadzi 1 - 2 pozycje, to bedzie widac, gdzie lezy problem. Dzieki z gory. (Funkcja szukaj ktora jest 1sza pozycja w menu dopiero bedzie.)
[Edit] Jezeli sposob w jaki umiescilem kod lub zadalem pytanie jest niezgodny z jakas niepisana zasada, co sprawia ze nikt nawet na niego nie spojrzy prosze o zwrocenie mi uwagi.
Kod zrodlowy:
#include <iostream>
#include <stdio.h>
#include <cstdlib>
#include <windows.h>
#include <string>
#include <fstream>
#define LICZBA_STUDENTOW 20
using namespace std;
struct student {
string nazwisko;
string imie;
int wiek;
} delikwent[LICZBA_STUDENTOW];
fstream plik;
void wprowadz(int*);
void odczyt_z_pliku(int*);
int main()
{
int i = 0;
while (1) {
system("cls");
printf("\tMENU\n");
printf("---------------------------\n");
int opcja;
printf("1- wyszukiwanie delikwenta\n");
printf("2- wprowadzanie delikwentow\n");
printf("3- odczyt listy delikwentow z pliku\n");
printf("4- koniec\n");
printf("---------------------------\n");
printf("\nPodaj wybor:\n");
scanf("%d", &opcja);
switch (opcja) {
case (1):
//szukaj();
break;
case (2):
wprowadz(&i);
break;
case (3):
odczyt_z_pliku(&i);
break;
case (4):
exit(1);
break;
default:
printf("zle wybrana opcja\n");
Sleep(2000);
break;
}
}
return 0;
}
//void szukaj(void){}
void wprowadz(int* i)
{
char wybor;
do {
system("cls");
plik.open("Studenci.txt", ios::out | ios::app);
cin.get();
cout << "Podaj nazwisko:\n";
getline(cin, delikwent[*i].nazwisko);
cout << "Podaj imie:\n";
getline(cin, delikwent[*i].imie);
cout << "Podaj wiek:\n";
cin >> delikwent[*i].wiek;
plik << delikwent[*i].nazwisko << "\n" << delikwent[*i].imie << "\n" << delikwent[*i].wiek << "\n";
plik.close();
cout << "Czy chcesz wprowadzic nastepna osobe?\n\t";
cout << "TAK(T)\tNIE(N)\n\t";
cin >> wybor;
(*i)++;
} while ((wybor == 't') && (*i < LICZBA_STUDENTOW));
}
void odczyt_z_pliku(int* i)
{
plik.open("Studenci.txt", ios::in);
if (plik.good()) {
string linia;
*i = 0;
int nr_linii = 1;
while (getline(plik, linia)) {
switch (nr_linii) {
case 1:
delikwent[*i].nazwisko = linia;
break;
case 2:
delikwent[*i].imie = linia;
break;
case 3:
delikwent[*i].wiek = atoi(linia.c_str());
break;
}
if (nr_linii == 3) {
nr_linii = 0;
(*i)++;
}
nr_linii++;
}
}
else
cout << "Plik nie istnieje!\n";
system("cls");
for (int j = 0; j <= *i; j++) {
if ((*i) == 0) {
puts("Nie wprowadziles jeszcze nikogo!");
Sleep(2000);
break;
}
cout << delikwent[j].nazwisko << " " << delikwent[j].imie << " " << delikwent[j].wiek << "\n";
}
if (*i) {
system("PAUSE");
}
plik.close();
}