Доброго времени суток! Имеется структура. У нее 3 поля - ФИО, знак зодиака, дата рождения. Хочется сделать так, чтобы данные, введенные в поля максимально соответствовали действительности, а не были банальным набором букв. Вот то, что удалось самостоятельно:
#include <iostream.h>
#include <conio.h>
#include <fstream.h>
const str_len = 30; //dlina txt_polya v strukture
const amount_elem = 2; //Koli4estvo elementov v massive struktur
struct znak //nasha struktura
{
char FIO[str_len];
char znak_zod[str_len];
int data_rojd[3];
};
znak *arr = new znak[amount_elem]; //massiv struktur
void vvod_elem(); //prototipi funkciy
int vivod_elem();
int main()
{
clrscr();
vvod_elem();
vivod_elem();
return 1;
}
void vvod_elem() //funkciya vvoda elementov
{
cout<<"Vvedite informaciu o ludyah"<<endl;
cout<<endl;
for (int i=0; i<amount_elem; i++) //tsikl vvoda elementov strukturi
{
cout<<"Vvedite FIO"<<endl;
cin>>arr[i].FIO; //vvodim fio
cout<<"Vvedite znak zodiaka"<<endl;
cin>>arr[i].znak_zod; //vvodim znak zodiaka
cout<<"Vvedite datu rojdeniya. Format dati: DD:MM:YYYY"<<endl;
while (arr[i].data_rojd[0]<1 ||
arr[i].data_rojd[0]>31 ||
arr[i].data_rojd[1]<1 ||
arr[i].data_rojd[1]>12 ||
arr[i].data_rojd[2]<1850 ||
arr[i].data_rojd[2]>2009) //[proverka pravilnosti vvoda dnya, mesyatsa i goda
{
for (int j=0; j<3; j++) cin>>arr[i].data_rojd[j];
if (arr[i].data_rojd[0]<1 || arr[i].data_rojd[0]>31) {cout<<"Nevernoe 4islo! Povtorite vvod!"<<endl;};
if (arr[i].data_rojd[1]<1 || arr[i].data_rojd[1]>12) {cout<<"Neverniy mesyats! Povtorite vvod!"<<endl;};
if (arr[i].data_rojd[2]<1850 || arr[i].data_rojd[2]>2009) {cout<<"Neverniy god! Povtorite vvod!"<<endl;};
}
cout<<endl;
}
}
int vivod_elem() //procedura vivoda elementov massiva
{
if (arr[0].FIO=="0") cerr<<"Massiv struktur pust! Vvedite elementi massiva!"<<endl; getch(); return; //esli pole FIO v 0m elemente pustoe - viyti
for (int i=0; i<amount_elem; i++)
{
cout<<"FIO: "<<arr[i].FIO;
cout<<"Znak zodiaka: "<<arr[i].znak_zod;
cout<<"Data rojdeniya: ";
for(int j=0; j<3; j++) cout<<arr[i].data_rojd[j]<<" ";
cout<<endl;
};
delete [] arr;
return 1;
}
Задачу начал решать с конца - сделал проверку для даты. Изначально она заработала, но потом (после перезапуска си) отказалась. Может это связано с тем, что массив динамический?
Пробовал сделать такую же проверку для знака зодиака, сравнивая поле со строчками - 0 реакции
Направьте на путь истинный